passieren Entweder als Methode Argument (nur wenn Ihre Umgebung unterstützt 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')}" />
mit
public void change(String language) {
locale = new Locale(language);
// ...
}
Oder verwenden <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>
mit
private String language;
public void change() {
locale = new Locale(language);
// ...
}
Oder <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>
mit
public void change() {
locale = new Locale(FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("language"));
// ...
}
(Sie auch von einem @ManagedProperty("#{param.language}")
JSF automatisch verwenden lassen gesetzt, aber dies erfordert die Bean-Anfrage zu sein Bereich, oder ein <f:viewParam>
, siehe auch ViewParam vs @ManagedProperty(value = "#{param.id}"))
genügend Möglichkeiten, um einen Parameter von der Ansicht an den Controller zu übergeben. Treffen Sie Ihre Wahl. Die <h:inputHidden>
dient im JSF-Kontext einem etwas anderen Zweck und kann nur durch JavaScript in der onclick
manipuliert werden, was hässlich ist.
Warum möchten Sie den Wert senden? Wenn das Formular gesendet wird, wird automatisch die Methode setLanguage() in Ihrem Bean localeSelector aufgerufen. – santedicola
Ihre '' ist übrigens seltsam. Dies ist kein gültiger JSF. Hast du das von Kopf bis Kopf geschrieben anstatt etwas zu kopieren? @Sante: OP fragt konkret, wie man dasselbe mit nur ein paar Buttons machen kann (also * ohne * die Dropdown-Liste). –
BalusC