當(dāng)事務(wù)成功之后(調(diào)用 persist()、update() 或 remove() 成功后),Home對(duì)象會(huì)發(fā)出一個(gè) org.jboss.seam.afterTransactionSuccess 事件。
通過監(jiān)聽這一事件,我們可以在底層實(shí)體改變后,刷新查詢。
如果我們只需要在特定的實(shí)體保存、修改或刪除后刷新特定查詢,我們可以監(jiān)視 org.jboss.seam.afterTransactionSuccess.<name> 事件(<name> 是實(shí)體的名字)。
當(dāng)一個(gè)操作成功時(shí),Home對(duì)象可以自動(dòng)地顯示Faces信息,我們可以再一次通過配置來定制信息。
<factory name="person"
value="#{personHome.instance}"/>
<framework:entity-home name="personHome"
entity-class="eg.Person"
new-instance="#{newPerson}">
<framework:created-message>New person #{person.firstName} #{person.lastName} created</framework:created-message>
<framework:deleted-message>Person #{person.firstName} #{person.lastName} deleted</framework:deleted-message>
<framework:updated-message>Person #{person.firstName} #{person.lastName} updated</framework:updated-message>
</framework:entity-home>
<component name="newPerson"
class="eg.Person">
<property name="nationality">#{country}</property>
</component>
或者擴(kuò)展:
@Name("personHome")
public class PersonHome extends EntityHome<Person> {
@In Country country;
@Factory("person")
public Person initPerson() { return getInstance(); }
protected Person createInstance() {
return new Person(country);
}
protected String getCreatedMessage() { return "New person #{person.firstName} #{person.lastName} created"; }
protected String getUpdatedMessage() { return "Person #{person.firstName} #{person.lastName} updated"; }
protected String getDeletedMessage() { return "Person #{person.firstName} #{person.lastName} deleted"; }
}
但是指定信息最好的方法是把信息置于Seam所知的resource bundle中(在默認(rèn)情況下,這個(gè)bundle叫做 messages )。
Person_created=New person #{person.firstName} #{person.lastName} created
Person_deleted=Person #{person.firstName} #{person.lastName} deleted
Person_updated=Person #{person.firstName} #{person.lastName} updated
這樣方便進(jìn)行國(guó)際化,從表現(xiàn)層的角度考慮也保持了代碼和配置的整潔。
最后一步是使用 <s:validateAll> 和 <s:decorate> 向頁面中添加驗(yàn)證功能,我會(huì)把這個(gè)留給你們自己去實(shí)現(xiàn)。