2012-05-29 87 views
0

請幫助我瞭解,當點擊如何A4J:命令按鈕決定豆

<h:form> 
    <h:panelGrid columns="3"> 
    <h:outputText value="Age:"/> 
    <h:inputText value="#{userBean.age}" size="4"/> 
    <a4j:commandButton value="Enter Age" reRender="age"/> 
    </h:panelGrid> 
    <h:panelGrid> 
    <h:outputText id="age" value="Your age: #{userBean.age}"/> 
    </h:panelGrid> 
</h:form> 

的commandButton,它是如何評價一個bean調用setter方法。它是否從輸入區域內使用的bean獲得了偏差?

謝謝

+0

如果commandbutton有任何actionlistener調用,那麼它會調用它。否則它也會做它想做的事情。 – Addicted

+0

你有什麼疑問?比如commandbutton是如何工作的?/ – Addicted

+0

我實際上是在問如何知道如何調用bean的setter,而沒有任何bean映射 – muneebShabbir

回答

8

命令按鈕不這樣做。命令按鈕僅爲其自身確定是否必須調用動作,如果是,則確定它是哪種方法。每個輸入組件都設置它們自己的值。實際工作在與組件關聯的Rendererdecode()方法中完成。在應用請求值階段,JSF遍歷所有UIForm,UIInputUICommand組件。它們中的每首先獲取通過自己的客戶端ID的請求參數的值作爲請求的參數名:

String value = request.getParameter(input.getClientId(context)); 

(該request是這裏HttpServletRequestinput是這裏UIInput

然後,轉換的處理後並在必要時進行驗證,最終將其設置爲由其自己的value屬性引用的bean屬性。

input.getValueExpression("value").setValue(context.getElContext(), value); 

ValueExpression#setValue()將評估#{userBean.age},自動創建,如果它不在範圍內還存在,然後用傳入的值調用setAge()方法就可以了豆。

這在JSF specification中全部詳細描述。

+0

這意味着,當調用出去然後'#{userBean.age}'調用' setAge()',當它獲取請求/重新呈現它調用'getAge()'權利? – muneebShabbir

+0

這確實是在封面下發生的事情。 – BalusC