我有以下页面:

<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:逐字标签,现在它正常工作。我仍然不明白为什么它导致了这种行为。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top