Getters Inside F: Vorbatim, вызванная перед подачей формы

StackOverflow https://stackoverflow.com/questions/4502465

  •  12-10-2019
  •  | 
  •  

Вопрос

У меня есть следующая страница:

<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. Gamebean.changegame называется 3. Страница обновляется.

Мои проблемы заключаются в порядке 1. и 2. Изменение Game модифицирует переменную Gamebean, которая используется GetGameid и GethtmlPage. Таким образом, я хочу выполнить его сначала, так что, когда другие панели обновляются, они содержат правильные данные.

Обратите внимание, что эта проблема, по -видимому, возникает только для вызова в элементе Gamediv (другие переменные правильно обновляются).

Не могли бы вы иметь какое -либо представление о том, что я мог бы сделать, чтобы вернуть порядок 1. и 2., чтобы метод изменения Game () был первым, названным?

Я использую Javaserver Faces 2.0 на Tomcat 7.0.

заранее спасибо

Это было полезно?

Решение

В соответствии с вашим отвечать по теме:

Я удалил тег F: Vorbatim, и теперь он работает должным образом. Я до сих пор не понимаю, почему это вызвало такое поведение.

А <f:verbatim> был введен в JSF 1.0 долгое время назад с единственной целью иметь возможность включать простые HTML в дерево компонентов JSF. На JSF 1.0 (и 1.1), когда компонентное дерево построено, все простые HTML были проигнорированы. Страница сначала выполняется со всеми простыми HTML, а затем отображаемым HTML компонентов JSF После этого. Анкет Так, например

<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>

Однако они вставлены во время взгляда строить время, а не во время взгляда оказывать время. Это является причиной вашей проблемы, Getters вызывают на этапе представления восстановления вместо фазы ответа.

Со времен JSF 1.2, с улучшенным обработчиком вида, можно было встроить простой HTML «синхронизировать», не доявшись на уродливых <f:verbatim> теги. Так что это больше не нужно. Также нет полезных вариантов использования для тега, ожидайте, что, возможно, некоторые преждевременные оптимизации производительности, но, тем не менее, вы не должны использовать его в сочетании с динамическими данными, как это получен на языке экспрессии.

Связанные вопросы:

Другие советы

Поместите непосредственный атрибут, установленную TRUE в CommandButton.

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

Затем он выполнит метод в фазе AppliveRequestValues.

Я удалил тег F: Vorbatim, и теперь он работает должным образом. Я до сих пор не понимаю, почему это вызвало такое поведение.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top