atributos - jsf h tag
Cómo pasar un parámetro junto con h: commandButton (1)
O pase como argumento de método (solo si su entorno admite EL 2.2),
<h:commandButton value="English" action="#{localeSelector.change(''en'')}" />
<h:commandButton value="Deutsch" action="#{localeSelector.change(''de'')}" />
<h:commandButton value="Français" action="#{localeSelector.change(''fr'')}" />
con
public void change(String language) {
locale = new Locale(language);
// ...
}
O use <f:setPropertyActionListener>
<h:commandButton value="English" action="#{localeSelector.change}">
<f:setPropertyActionListener target="#{localeSelector.language}" value="en" />
</h:commandButton>
<h:commandButton value="Deutsch" action="#{localeSelector.change}">
<f:setPropertyActionListener target="#{localeSelector.language}" value="de" />
</h:commandButton>
<h:commandButton value="Français" action="#{localeSelector.change}">
<f:setPropertyActionListener target="#{localeSelector.language}" value="fr" />
</h:commandButton>
con
private String language;
public void change() {
locale = new Locale(language);
// ...
}
O usa <f:param>
<h:commandButton value="English" action="#{localeSelector.change}">
<f:param name="language" value="en" />
</h:commandButton>
<h:commandButton value="Deutsch" action="#{localeSelector.change}">
<f:param name="language" value="de" />
</h:commandButton>
<h:commandButton value="Français" action="#{localeSelector.change}">
<f:param name="language" value="fr" />
</h:commandButton>
con
public void change() {
locale = new Locale(FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("language"));
// ...
}
(También puede dejar que JSF lo configure automáticamente mediante @ManagedProperty("#{param.language}")
, pero esto requiere que el bean se solicite con ámbito, o a <f:viewParam>
, consulte también ViewParam vs @ManagedProperty (value = "# {param.id}") )
Suficientes formas de pasar un parámetro de vista a controlador. Elige tu opción. El <h:inputHidden>
sirve en el contexto JSF un propósito algo diferente y solo puede ser manipulado por JavaScript en el onclick
que es feo.
Uno de los enfoques más comunes para cambiar la configuración regional en JSF + Seam - con <h:selectOneMenu>
:
<h:form action="#{localeSelector.select}" rendered="false">
<h:selectOneMenu value="#{localeSelector.language}" onchange="submit()">
<f:selectItem itemLabel="English" itemValue="en" />
<f:selectItem itemLabel="Francais" itemValue="fr" />
</h:selectOneMenu>
</h:form>
Quiero implementar cambios de configuración regional con botones. Entonces, la pregunta es: ¿cómo pasar el parámetro (en, fr, etc.) para actualizar el bean con <h:commandButton>
? Tal vez <h:inputHidden>
sería de ayuda?