2010/01/31

Play!(2-4)

資料的修正


接下來為保存好得資料作成修正功能吧。這就是將資料的作成和檢索組合起來。換句話說,把要再次編輯的資料藉由檢索取出
然後改變值之後存入的作業。

那麼來製作模板吧。在「views」的「Application」裡作成一個新的「edit.html」檔案,然後加入下面的原始碼。

#{extends 'main.html' /}
#{set title:'Home' /}
<h1>Editing Message</h1>
${msg}
#{if data != null}
<form method="post" action="@{Application.edit}">
<input type="hidden" name="id" value="${data.id}" />
<table>
        <tr><td>id:</td><td>${data.id}</td></tr>
        <tr><td>name:</td><td><input type="text" name="name" value="${data.name}" /></td></tr>
        <tr><td>message:</td><td><input type="text" name="message" value="${data.message}" /></td></tr>
        <tr><td></td><td><input type="submit" value="Submit" /></td></tr>
</table>
</form>
#{/if}

這裡準備了修改特定資料的編輯表單,這個表單裡id號碼是用隱藏起來不給人修改,其他的
name和message用<input type="text">的可編輯顯示。分別把${data}的值設給value的話,編輯的資料值在一
開始就會顯示之前的訊息值。

後來的Controller部份,把再度編輯後的資料取得,作為${data}處理,然後用POST送出的話,這個資料就被
修正、保存了。那麼來實際寫edit方法吧。

public static void edit(long id,String message,String name){
        String msg = "Please edit data";
        MsgData data = null;
        data= MsgData.findById(id);
        if (request.method.equals("POST")) {
                data.name = name;
                data.message = message;
                data.save();
                msg = "Data was updated";
        }
        render(data,msg);
}

編輯的資料用id這個成員來指定,存取的時候URL會像「http://localhost:9000/edit?id=1」這樣,edit的後面
接著「?id=號碼」這樣的形式來存取該id的資料並顯示出該id的資料內容表單,只要將裡面的內容改寫然後送信就能修
正資料了。

這裡首先先透過GET的存取、藉由引數id的指來取得資料,交由render來處理。從id取得資料只要用findById就可以。

data = MsgData.findById(id);

「findById」是用被指定的id號碼來取出資料。需要注意的是「引數不是int而是long」的這一點。用這樣的方法取出資料
然後改變值保存。POST時的處理就用下面這樣來處理。

data.name = name;
data.message = message;
data.save();

為實例的欄位作新的設定、用save保存。save不只用在加入新的資料,也在這樣資料更新的時候使用。

資料的刪除


剩下的就只有資料的刪除了。這也是直接利用資料的修正的介面。id=xx的形式把成員附加在後面來然後顯示、按下按鈕送
出後就會將那個資料刪除的作業流程。

首先從模板開始。「views」的「Application」裡作成一個「del.html」檔案

#{extends 'main.html' /}
#{set title:'Home' /}
<h1>Delete Message</h1>
${msg}
#{if data != null}
<form method="post" action="@{Application.del}">
<input type="hidden" name="id" value="${data.id}" />
<table>
        <tr><td>id:</td><td>${data.id}「${data.message}」</td></tr>
        <tr><td></td><td><input type="submit" value="Delete" /></td></tr>
</table>
</form>
#{/if}

基本的形式跟edit.html一樣。不同的地方是表單裡只有送出的id而已。只要削除的id號碼
就足夠了。

接下來在Controller裡準備Application要存取的「del」方法。

public static void del(long id,String message,String name){
        String msg = "Do you want to delete data?";
        MsgData data = null;
        data= MsgData.findById(id);
        if (request.method.equals("POST")) {
                data.delete();
                msg = "data was deleted";
        }
        render(data,msg);
}

跟剛才的edit一樣「del?id=1」這樣的URL形式,將id作為成員接在後面來存取後將資料表示出來。確認之後按下按鈕
資料就會被刪除。這裡用MsgData.findBy(id)取得資料然後刪除。

data.delete();

只是這樣就將資料刪除了,相當的單純。

No comments:

Post a Comment