关于使用<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