1

我正在尝试从 Java Bean 访问 JSF 元素,因此我可以在我的应用程序中使用它,但我需要将文本从 a 发送textarea到 a<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>
4

1 回答 1

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>

在这种情况下,将在表单提交期间填充字符串列表,并且所有答案都将在 action 方法中可用:

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 属性,并将作为currentAnswerbean 属性使用。

于 2013-05-12T16:10:48.987 回答