Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java f中的getter:在表单提交之前逐字调用_Java_Jsf_Verbatim - Fatal编程技术网

Java f中的getter:在表单提交之前逐字调用

Java f中的getter:在表单提交之前逐字调用,java,jsf,verbatim,Java,Jsf,Verbatim,我有以下一页: <h:form id="gameSelectionForm"> <h:selectOneMenu id="gameSelection"> <f:selectItems value="#{gameBean.gameIds}" /> </h:selectOneMenu> <h:commandButton id="gameSelector" value="Play" action="#{gam

我有以下一页:

<h:form id="gameSelectionForm">
    <h:selectOneMenu id="gameSelection">
        <f:selectItems value="#{gameBean.gameIds}" />
    </h:selectOneMenu>
    <h:commandButton id="gameSelector" value="Play" action="#{gameBean.changeGame}"  />
</h:form>

<h:panelGroup id="gameDiv">
    <f:verbatim>
        <iframe src="/levelup/resources/games/#{gameBean.gameId}/#{gameBean.htmlPage}"  width="700px" height="800px" frameborder="0"/>
    </f:verbatim>
</h:panelGroup>

当我点击“游戏选择器”按钮时,事件顺序如下: 1.调用gameBean.getGameId和gameBean.getHtmlPage 2.gameBean.changeGame被称为 3.页面已刷新

我的问题按1的顺序排列。二,。changeGame修改getGameId和getHtmlPage使用的gameBean变量。因此,我希望它首先执行,以便在刷新其他面板时,它们包含正确的数据

请注意,此问题似乎仅出现在gameDiv元素内的调用中(其他变量已正确刷新)

你知道我能做些什么来恢复1的顺序吗。2.,那么changeGame()方法是第一个被调用的方法吗

我正在Tomcat7.0上使用JavaServerFaces2.0


提前感谢

在commandButton上将立即属性设置为true

<h:commandButton id="gameSelector" value="Play" action="#{gameBean.changeGame}" immediate="true" />


它将在ApplyRequestValues阶段执行该方法。

我删除了f:verbatim标记,现在它可以正常工作了。但我仍然不明白为什么它会导致这种行为。

根据您对这个话题的看法:


我删除了f:verbatim标记,现在它可以正常工作了。但我仍然不明白为什么它会导致这种行为

很久以前,JSF 1.0中引入了
,其唯一目的是能够在JSF组件树中包含普通HTML。在JSF1.0(和1.1)上,当构建组件树时,所有普通HTML都被忽略。首先使用所有普通HTML呈现页面,然后使用JSF组件的呈现HTML呈现页面。比如说

你好

世界

这很奇怪

渲染为

你好

世界

这很奇怪

输出文本
允许开发人员将普通HTML引入JSF组件树,以便按照您从编码中预期的方式呈现“同步”

你好

世界

这很奇怪

但是,它们在查看构建期间内联,而不是在查看渲染期间内联。这就是问题的原因,getter在恢复视图阶段而不是呈现响应阶段被调用

自JSF1.2以来,通过改进的视图处理程序,可以“同步”内联普通HTML,而无需使用丑陋的
标记。所以不再需要了。对于标记也不再有有用的用例,除了可能出现一些过早的性能优化之外,但是仍然不应该将它与通过表达式语言获得的动态数据结合使用

相关问题:

这是我第一次尝试的,但没有成功。奇怪的是,只有getGameId和getHtmlId被首先调用;调用changeGame操作后,将调用所有其他getter。您可能应该将它们放在同一表单(gameselectionform)中!感谢您的详细回答:)