在f:verbatim里面的getters在表单提交之前调用

Séb*_*omp 2 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="#{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>
Run Code Online (Sandbox Code Playgroud)

当我点击"gameSelector"按钮时,这里是事件序列:1.调用gameBean.getGameId和gameBean.getHtmlPage 2.调用gameBean.changeGame 3.刷新页面.

我的问题在于1.和2. changeGame修改了getGameId和getHtmlPage使用的gameBean变量.因此,我希望它首先执行,以便在刷新其他面板时,它们包含正确的数据.

请注意,此问题似乎只发生在gameDiv元素中的调用(其他变量已正确刷新).

您是否知道我可以做什么来恢复1.和2.的顺序,以便changeGame()方法是第一个被调用的?

我在Tomcat 7.0上使用JavaServer Faces 2.0.

提前致谢

Bal*_*usC 5

根据你自己对这个主题的回答:

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

<f:verbatim>在JSF 1.0长时间回来的唯一目的引入能够以包括JSF组件树纯HTML.在JSF 1.0(和1.1)上,当构建组件树时,忽略了所有纯HTML.该网页获得的所有普通的HTML呈现先,然后JSF组件的HTML渲染其后.所以举个例子

<p>Hello</p>
<h:inputText />
<p>World</p>
<h:outputText value="outputtext" />
<p>This is weird</p>
Run Code Online (Sandbox Code Playgroud)

得到呈现

<p>Hello</p>
<p>World</p>
<p>This is weird</p>
<input type="text" />
outputtext    
Run Code Online (Sandbox Code Playgroud)

<f:verbatim>允许开发商采取纯HTML到JSF组件树,使他们得到渲染的"同步",你会从编码期望.

<f:verbatim><p>Hello</p></f:verbatim>
<h:inputText />
<f:verbatim><p>World</p></f:verbatim>
<h:outputText value="outputtext" />
<f:verbatim><p>This is weird</p></f:verbatim>
Run Code Online (Sandbox Code Playgroud)

但是,它们在视图构建期间内联,而不是在视图渲染时间内.这是导致问题的原因,在恢复视图阶段而不是渲染响应阶段调用getter.

从JSF 1.2开始,使用改进的视图处理程序,可以将纯HTML"同步"内联,而不必讨厌丑陋的<f:verbatim>标签.所以不再需要了.期望标签也没有有用的用例,期望可能会有一些过早的性能优化,但是,您不应该将它与表达式语言获得的动态数据结合使用.

相关问题: