我正在尝试从Java Bean访问JSF元素,所以我可以在我的应用中使用它,但我需要将文本从textarea
发送到<f:setPropertyActionListener />
问题是我不知道如何告诉<f:setPropertyActionListener />
采用`textarea值
我确定这是一个小小的语法错误,但我看不到它U__U
这里有一些代码,如果你告诉我将来怎么做,我会非常感激,因为我需要它;)
<h:form>
<h:dataTable var="answer" value="#{AnswerController.answer}">
<h:column>
#{msgs.newAnswer}<br/>
<h:inputTextarea id="textanswer" name="text" rows="5" cols="20" /> <br/>
<h:commandButton value="#{msgs.aceptButton}" type="submit" action="#{AnswerController.newAnswer(answer)}" immediate="true">
<f:setPropertyActionListener target="#{AnswerController.currentAnswer}"
value="textanswer" />
</h:commandButton>
</h:column>
</h:dataTable>
</h:form>
答案 0 :(得分:2)
关于<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属性,并将以{{1}的形式提供bean属性。