题
我有以下页面:
<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>
当我单击“ GamesElector”按钮时,这是事件的序列:1。gameBean.GetGameID和gameBean.gethtmlpage称为2.游戏bean.changegame.ChangeGame 3. 3.页面已刷新。
我的问题在于1。和2. ChangeGame修改了GetGameID和Gethtmlpage使用的游戏式变量。因此,我想先执行它,以便当其他面板刷新时,它们包含适当的数据。
请注意,此问题似乎仅适用于GameDiv元素中的呼叫(其他变量得到了正确刷新)。
您是否对我能做什么来恢复1.和2.的顺序有什么想法,以便changegame()方法是第一个调用的方法?
我在Tomcat 7.0上使用Javaserver面孔2.0。
提前致谢
解决方案
按照你自己 回答 关于这个主题:
我删除了f:逐字标签,现在它正常工作。我仍然不明白为什么它导致了这种行为。
这 <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>
被渲染为
<p>Hello</p>
<p>World</p>
<p>This is weird</p>
<input type="text" />
outputtext
这 <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>
但是,它们在视图中被绑住了 建造 时间,不是在视图中 使成为 时间。这是造成问题的原因,在还原视图阶段而不是渲染响应阶段被调用。
由于JSF 1.2(有了改进的View处理程序),因此可以在不与丑陋的情况下嵌入平原HTML“同步” <f:verbatim>
标签。因此不再需要。该标签也没有有用的用例,期望某些过早的性能优化,但是那时,您不应将其与Expression语言获得的动态数据结合使用。
相关问题:
其他提示
将即时属性设置为commandbutton上。
<h:commandButton id="gameSelector" value="Play" action="#{gameBean.changeGame}" immediate="true" />
然后,它将在ApplyRequestValues阶段执行该方法。
我删除了f:逐字标签,现在它正常工作。我仍然不明白为什么它导致了这种行为。