無論是作爲傳遞方法參數(僅當您的環境支持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')}" />
與
public void change(String language) {
locale = new Locale(language);
// ...
}
或者使用<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>
與
private String language;
public void change() {
locale = new Locale(language);
// ...
}
或者使用<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>
與
public void change() {
locale = new Locale(FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("language"));
// ...
}
(你也可以讓JSF由@ManagedProperty("#{param.language}")
自動設置的,但是,這個要求bean是請求範圍,或<f:viewParam>
,另請參閱ViewParam vs @ManagedProperty(value = "#{param.id}"))
有足夠的方法將參數從視圖傳遞到控制器。拿你的選擇。 <h:inputHidden>
在JSF上下文中有一個不同的用途,它只能由onclick
中的JavaScript操作,這很醜陋。
爲什麼要發送值?提交表單時,Bean localeSelector上的方法setLanguage()將自動調用。 – santedicola
你的''順便說一句,這是無效的JSF。你是從頭頂上寫下來的東西而不是副本嗎? @Sante:OP具體詢問如何只用一堆按鈕來做同樣的事情(因此,*沒有*下拉列表)。 –
BalusC