關於使用<f:setPropertyActionListener>
kolossus是正確的:如果您使用EL 2.2,能夠使用參數調用方法,則不是必需的。否則,該標籤可用於識別命令按鈕的哪個被按下,並最終哪個答案應該在要操縱的bean中出現。
在你的情況下,我可以看到兩個用例,這兩個用例如下所述。
提交只有一個答案
在這種情況下,你應該使用每個數據迭代一個形式,使得只有一個答案會來的服務器。把kolossus'註釋爲代碼,以及有:
<h:dataTable var="answer" value="#{bean.answers}">
<h:column>
<h:form>
#{msgs.newAnswer}<br/>
<h:inputTextarea id="textanswer" value="#{bean.currentAnswer}" rows="5" cols="20" /> <br/>
<h:commandButton value="#{msgs.aceptButton}" action="#{bean.newAnswer}" />
</h:form>
</h:column>
</h:dataTable>
有了這個代碼,這個bean的一個字符串屬性是不夠的,它會在一個監聽方法可用:
private String currentAnswer;//getter+setter
提交所有答案
在這種情況下,你應該有每一個數據表的形式,所有的答案將在支持Bean的列表結束:
<h:form>
<h:dataTable var="answer" value="#{bean.answers}">
<h:column>
#{msgs.newAnswer}<br/>
<h:inputTextarea id="textanswer" value="#{answer}" rows="5" cols="20" /> <br/>
</h:column>
</h:dataTable>
<h:commandButton value="#{msgs.aceptButton}" action="#{bean.newAnswers}" />
</h:form>
在這種情況下,一個字符串列表,將形成在填充提交和所有答案將在操作方法可供選擇:
List<String> answers;//getter+setter
帶參數的方法調用或<f:setPropertyActionListener>
的使用情況
如您所見,上述兩種設置均未使用它們。如果您想知道選擇了哪個答案,那麼它們很有用,以便正確的答案可以被操縱。像:
<h:dataTable var="answer" value="#{bean.answers}">
<h:column>
<h:form>
#{msgs.deleteAnswer}<br/>
<h:inputTextarea id="textanswer" value="#{answer}" rows="5" cols="20" /> <br/>
<h:commandButton value="#{msgs.deleteButton}" action="#{bean.deleteAnswer(answer)}" />
</h:form>
</h:column>
</h:dataTable>
在
<h:dataTable var="answer" value="#{bean.answers}">
<h:column>
<h:form>
#{msgs.deleteAnswer}<br/>
<h:inputTextarea id="textanswer" value="#{answer}" rows="5" cols="20" /> <br/>
<h:commandButton value="#{msgs.deleteButton}" action="#{bean.deleteAnswer(answer)}">
<f:setPropertyActionListener value="#{answer}" target="#{bean.currentAnswer}" />
</h:commandButton>
</h:form>
</h:column>
</h:dataTable>
在與按鈕點擊相關聯的第一示例的答案將可作爲方法的參數,以及與按鈕點擊相關聯的第二示例答案
或可替代地將被設置在調用操作方法之前調用bean屬性,並將作爲currentAnswer
bean屬性提供。
感謝您的提示;)我正在改變它;) – Santanor 2013-05-12 14:59:30
' '是不必要的;只需將' '的'value'綁定到'#{AnswerController.currentAnswer}',這樣就可以得到'''。有沒有什麼限制你這樣做? –
kolossus
2013-05-12 15:15:04
如果我這樣做,當我改變inputTextArea的值時,它會修改Bean中的值? – Santanor 2013-05-12 15:27:49