Compuestos absorbentes dentro de f: textualmente llamadas antes de enviar el formulario

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

  •  12-10-2019
  •  | 
  •  

Pregunta

Tengo la página siguiente:

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

Cuando hago clic en el botón "gameSelector", aquí está la secuencia de eventos: 1. gameBean.getGameId y gameBean.getHtmlPage se llaman 2. gameBean.changeGame se llama 3. La página se actualiza.

Mis problemas se encuentra en el orden de 1. y 2. La changeGame modifica una variable de gameBean que se utiliza por el getGameId y getHtmlPage. por lo tanto quiero que ejecutar en primer lugar, para que cuando se actualizan otros paneles, que contienen los datos adecuados.

Tenga en cuenta que este problema parece ocurrir sólo para la llamada dentro del elemento gameDiv (otras variables se actualizan correctamente).

¿Quieres que tiene alguna idea de lo que podía hacer para revertir el orden de los puntos 1 y 2, por lo que el método changeGame () es la primera llamada?

Estoy utilizando JavaServer Faces 2.0 en Tomcat 7.0.

Gracias de antemano

¿Fue útil?

Solución

Según su propia respuesta en este tema:

Quité el f: Etiqueta pie de la letra, y ahora funciona correctamente. Todavía no entiendo por qué ha causado este comportamiento sin embargo.

El <f:verbatim> se introdujo en JSF 1.0 una parte posterior de largo tiempo con el único fin de poder incluir HTML plano en el árbol de componentes JSF. En JSF 1.0 (y 1.1), cuando el árbol de componentes se construyen, se ignoró todo el HTML plano. La página Cómo representa con todo el HTML plano primero y luego el HTML procesado de componentes JSF después . Así, por ejemplo

<p>Hello</p>
<h:inputText />
<p>World</p>
<h:outputText value="outputtext" />
<p>This is weird</p>

get representa como

<p>Hello</p>
<p>World</p>
<p>This is weird</p>
<input type="text" />
outputtext    

El <f:verbatim> permitió a los desarrolladores tomar HTML plano en el árbol de componentes JSF, para que puedan obtener prestados "en sincronización", como era de esperar de la codificación.

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

Sin embargo obtener inline durante la vista acumulación tiempo, no durante la vista render tiempo. Esta es la causa de su problema, los captadores quedan invocados durante la restauración fase de vista en lugar de rendir fase de respuesta.

Desde JSF 1.2, con la mejora de controlador de vista, fue posible a la versión HTML inline "en sincronización", sin la molestia con las etiquetas <f:verbatim> feas. Por lo tanto, no se necesita más. También hay casos de uso no es útil para la etiqueta más, esperar, posiblemente, algunos de optimizaciones de rendimiento prematuros, pero aún entonces, no se debe utilizar en combinación con datos dinámicos como se obtiene mediante lenguaje de expresión.

preguntas relacionadas:

Otros consejos

Ponga un conjunto de atributos inmediata a verdadera en la commandButton.

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

Será ejecutar el método en la fase ApplyRequestValues ??entonces.

Me quita el f: Etiqueta pie de la letra, y ahora funciona correctamente. Todavía no entiendo por qué ha causado este comportamiento sin embargo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top