在OOP的設計裡,屬性名稱叫name、id、type、property等,在不同的套件或框架下,未必全然等義。在良葛格網站這篇文章寫著<html:form>的name屬性是struts_config.xml的ActionForm的name,實際上是type屬性,而且<html:form>根本連id、name屬性都沒有,強加反而造成JSP編譯錯誤。而<html:text>、<html:submit>等若不放在<html:form>下,POST到Server端是無法用DynaBean取值的,只能用request.getParameter取得。
而ActionForm若是LazyValidatorForm,從Server傳到Client沒有問題,但從Client POST到Server,倘若使用<html:form>,則需在struts_config.xml裡,在<form-bean>下加<form-property>子標籤,如此,像<html:text property="customerName">的值才能POST到DynaBean:
<form-beans> |
之前試過可以在<html:text>再指定name屬性(即ActionForm名稱),則毋須置於<html:form>底下就能POST到DynaBean成功,但目前會失敗,目前試出來的是,submit可以post到DynaBean,而用Ajax去Post,則DynaBean都無法取到值(偶有成功),在猜是否與jQuery的serialize方法有關?!
另外<form-bean>若把restricted屬性設為true(配置檔粗體字部份),可限制前端要POST的屬性名稱,未定義在<form-bean>裡的<form-property>是不會被當作submit的內容。
此外,LazyValidatorForm的DynaBean使用上還要特別注意一點,比如dynaForm.set("vo", bean);。是把一個JavaBean設給DynaBean的key名為vo,可是當end user點選另一個url操作別的功能,也用到vo這個key name,會造成Cast的問題,所以切換時,該url事先做dynaBean.set("vo", null)予以清空,就不會有問題。