java - example - h outputlink
h: commandLink no funciona cuando está dentro de una lista (1)
Tengo un problema con RichFaces y la creación de listas de enlaces. Si intentas utilizar cualquier tipo de comandoLink dentro de una lista (he intentado ui: repeat y rich: list), no se llama a la acción en ese enlace. También probé CommandButton y las variaciones a4j de esos. Estoy usando JSF 2, RichFaces 4 en Jboss 6.
<rich:list var="venue" value="#{searchManager.results}" type="definitions" stateVar="status">
<h:form>
<h:commandLink value="CLICK IT" immediate="true" action="#{score.selectVenue}" />
</h:form>
</rich:list>
La posición del formulario tampoco importa.
<h:form>
<rich:list var="venue" value="#{searchManager.results}" type="definitions" stateVar="status">
<h:commandLink value="CLICK IT" immediate="true" action="#{score.selectVenue}" />
</rich:list>
</h:form>
Si solo tengo el enlace por sí mismo (sin lista), funciona.
Cualquier ayuda sería muy apreciada.
Cuando hace clic en un enlace de comando o presiona un botón de comando para enviar un formulario, durante la fase Aplicar valores de solicitud escanea el árbol de componentes para el enlace / botón de comando en cuestión para que pueda encontrar la expresión de acción asociada con él, que es en su caso #{score.selectVenue}
.
Sin embargo, para poder llegar a eso, deberá asegurarse de que #{searchManager.results}
devuelva exactamente la misma lista que cuando se mostraba el formulario. Porque con una lista de resultados vacía, no habría ningún enlace / botón de comando en la vista en absoluto durante la fase de aplicar los valores de solicitud del formulario enviado.
El bean #{searchManager}
parece tener un alcance de solicitud. Los beans con alcance solicitados tienen una vida útil de exactamente un ciclo de solicitud-respuesta. Por lo tanto, cuando envíe el formulario, obtendrá una nueva instancia y otra instancia del bean de ámbito de solicitud de lo que era cuando se mostró el formulario. La propiedad de results
no parece conservarse durante la construcción (posterior) del frijol y, por lo tanto, permanece vacía. Entonces, JSF no puede encontrar el enlace / botón de comando en cuestión y, por lo tanto, no puede encontrar la expresión de acción asociada con él y, por lo tanto, no puede invocarlo.
Como está utilizando JSF2, una solución fácil es colocar el bean en el alcance de la vista. De esta manera, el bean vivirá siempre que envíe y navegue exactamente a la misma vista devolviendo null
o void
en los métodos de acción.
@ManagedBean
@ViewScoped
public class SearchManager {
// ...
}