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,而无需使用丑陋的
标记。所以不再需要了。对于标记也不再有有用的用例,除了可能出现一些过早的性能优化之外,但是仍然不应该将它与通过表达式语言获得的动态数据结合使用
相关问题: