Hoặc vượt qua như là đối số phương pháp (chỉ khi môi trường của bạn hỗ trợ 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')}" />
với
public void change(String language) {
locale = new Locale(language);
// ...
}
Hoặc sử dụng <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>
với
private String language;
public void change() {
locale = new Locale(language);
// ...
}
Hoặc sử dụng <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>
với
public void change() {
locale = new Locale(FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("language"));
// ...
}
(bạn cũng có thể cho JSF tự động thiết lập nó bằng một @ManagedProperty("#{param.language}")
, nhưng điều này đòi hỏi phải đậu được yêu cầu phạm vi hoặc <f:viewParam>
, xem thêm ViewParam vs @ManagedProperty(value = "#{param.id}"))
Đủ cách để chuyển thông số từ chế độ xem sang bộ điều khiển. Bạn chọn đi. Các <h:inputHidden>
phục vụ trong bối cảnh JSF một mục đích hơi khác nhau và nó chỉ có thể được thao tác bởi JavaScript trong onclick
đó là xấu xí.
Tại sao bạn muốn gửi giá trị? Khi biểu mẫu được gửi, phương thức setLanguage() trên Bean localeSelector của bạn sẽ tự động được gọi. – santedicola
'' của bạn theo cách lạ. Đây không phải là JSF hợp lệ. Bạn đã viết điều này từ đầu của đầu hoặc một cái gì đó thay vì copypasting? @Sante: OP là cụ thể yêu cầu làm thế nào để làm tương tự với chỉ một loạt các nút (do đó, * mà không có * danh sách thả xuống). –
BalusC