java - 为 JSF 元素设置正确的值

标签 java jsf servlets javabeans

我正在尝试从 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>

最佳答案

关于<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 属性。

关于java - 为 JSF 元素设置正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16508624/

相关文章:

java - 如何将包装类附加到 "view"类型以外的 View

java - 为什么单个下划线字符是 lambda 参数的非法名称?

java - 为 JSF 应用程序将 JS、CSS 和图像资源放在 JAR 中是个好主意吗?

jsf - 如何在 JSF 2.0 中重定向

jsf - 如何在 WildFly 上安装 JSF 2.3 (javax.faces.jar) 的一个 jar 变体

java - 如何使用 servlet 运行 Freemarker 模板?

java - 页面无法加载,Apache Tomcat 服务器错误

java - 如何配置不同打包子项目的Maven多模块依赖

Java 启动画面

jsp - HTTPSession 变量限制