JSF教程 – JSF值更改事件示例
我们可以处理h:inputText或h:selectOneMenu的值更改事件。
要注册事件处理程序侦听器,请传递UI组件的valueChangeListener属性中的托管bean方法的名称。
或者实现ValueChangeListener接口,并将实现类名称传递给UI Component的valueChangeListener属性。
以下代码显示如何将方法从Managed Bean注册到valueChangeListener方法
public void localeChanged(ValueChangeEvent e){
//assign new value to country
selectedCountry = e.getNewValue().toString();
}
注册方法
<h:selectOneMenu value="#{userData.selectedCountry}" onchange="submit()"
valueChangeListener="#{userData.localeChanged}" >
<f:selectItems value="#{userData.countries}" />
</h:selectOneMenu>
以下代码显示了如何实现ValueChangeListener。
public class LocaleChangeListener implements ValueChangeListener {
@Override
public void processValueChange(ValueChangeEvent event)
throws AbortProcessingException {
//access country bean directly
UserData userData = (UserData) FacesContext.getCurrentInstance().
getExternalContext().getSessionMap().get("userData");
userData.setSelectedCountry(event.getNewValue().toString());
}
}
并注册到f:valueChangeListener标签。
<h:selectOneMenu value="#{userData.selectedCountry}" onchange="submit()">
<f:valueChangeListener type="com.tutorialspoint.test.LocaleChangeListener"
/>
<f:selectItems value="#{userData.countries}" />
</h:selectOneMenu>
例子
以下代码来自demo.xhtml。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:body>
<h:form>
Selected country locale :
<h:inputText id="country" value="#{country.localeCode}" size="20" />
Select a country {method binding}:
<h:selectOneMenu value="#{country.localeCode}" onchange="submit()"
valueChangeListener="#{country.countryLocaleCodeChanged}">
<f:selectItems value="#{country.countryInMap}" />
</h:selectOneMenu>
Select a country:
<h:selectOneMenu value="#{country.localeCode}" onchange="submit()">
<f:valueChangeListener type="cn.w3cschool.common.MyValueChangedListener" />
<f:selectItems value="#{country.countryInMap}" />
</h:selectOneMenu>
</h:form>
</h:body>
</html>
以下代码来自MyValueChangedListener.java。
package cn.w3cschool.common;
import javax.faces.context.FacesContext;
import javax.faces.event.AbortProcessingException;
import javax.faces.event.ValueChangeEvent;
import javax.faces.event.ValueChangeListener;
public class MyValueChangedListener implements ValueChangeListener{
@Override
public void processValueChange(ValueChangeEvent event)
throws AbortProcessingException {
UserBean country = (UserBean) FacesContext.getCurrentInstance().
getExternalContext().getSessionMap().get("country");
country.setLocaleCode(event.getNewValue().toString());
}
}
下面的代码来自UserBean.java。
package cn.w3cschool.common;
import java.io.Serializable;
import java.util.LinkedHashMap;
import java.util.Map;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.event.ValueChangeEvent;
@ManagedBean(name="country")
@SessionScoped
public class UserBean implements Serializable{
private static final long serialVersionUID = 1L;
private static Map<String,String> countries;
private String localeCode = "en"; //default value
static{
countries = new LinkedHashMap<String,String>();
countries.put("United Kingdom", "en"); //label, value
countries.put("French", "fr");
countries.put("German", "de");
}
public void countryLocaleCodeChanged(ValueChangeEvent e){
localeCode = e.getNewValue().toString();
}
public Map<String,String> getCountryInMap() {
return this.countries;
}
public String getLocaleCode() {
return localeCode;
}
public void setLocaleCode(String localeCode) {
this.localeCode = localeCode;
}
}
下载 Value_Changed_Event.zip
运行
将生成的WAR文件从目标文件夹复制到Tomcat部署文件夹,并运行Tomcat-Install-folder/bin/startup.bat。
Tomcat完成启动后,在浏览器地址栏中键入以下URL。
http://localhost:8080/simple-webapp/demo.xhtml

国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码













