Entrambi passano come metodo di argomento (solo se l'ambiente supporta 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);
// ...
}
Oppure utilizzare <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 utilizzare <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"));
// ...
}
(si può anche lasciare JSF impostata automaticamente da un @ManagedProperty("#{param.language}")
, ma questo richiede il fagiolo di essere richiesta scoped, o <f:viewParam>
, vedere anche ViewParam vs @ManagedProperty(value = "#{param.id}"))
modi sufficiente per passare un parametro da vista controllore. Fai la tua scelta. Il <h:inputHidden>
serve in contesto JSF uno scopo un po 'diverso e può essere manipolato solo da JavaScript nello onclick
che è brutto.
Perché si desidera inviare il valore? Quando il modulo viene inviato, viene chiamato automaticamente il metodo setLanguage() sul tuo localizzatore di settore Bean. – santedicola
Il tuo '' è strano. Questo non è valido JSF. Hai scritto questo da cima a capo o qualcosa invece di copypasting? @ Sante: OP sta chiedendo concretamente come fare lo stesso con solo un gruppo di pulsanti (quindi, * senza * l'elenco a discesa). –
BalusC