您的位置:首页 > Web前端 > JavaScript

JSF---->事件处理--值变事件

2012-05-17 23:09 567 查看
如果使用者改变了JSF输入组件的值后送出窗体,就会发生值变事件(Value Change Event),这会丢出一个javax.faces.event.ValueChangeEvent对象,如果您想要处理这个事件,有两种方式,一是直接设定JSF输入组件的valueChangeListener属性,例如:

<h:selectOneMenu value="#{user.locale}"
onchange="this.form.submit();"
valueChangeListener="#{user.changeLocale}">

<f:selectItem itemValue="zh_CN" itemLabel="Chinese"/>
<f:selectItem itemValue="en" itemLabel="English"/>
</h:selectOneMenu>

为选择了选单项目之后就立即发生反应,我们在onchange属性中使用了JavaScript,其作用是在选项项目发生改变之后,立即送出窗体,而不用按下提交按钮;而valueChangeListener属性所绑定的user.changeLocale方法必须接受ValueChangeEvent对象,例如:UserBean.java

package wsz.ncepu;

import javax.faces.event.ValueChangeEvent;

public class UserBean {
public String locale;
private String name;
private String password;
private String errMessage;

public void changeLocale(ValueChangeEvent event) {
if ("en".equals(locale))
locale = "zh_CN";
else
locale = "en";
}

public void setLocale(String locale) {
this.locale = locale;
}

public String getLocale() {
return this.locale;
}

public void setName(String name) {
this.name = name;
}

public String getName() {
return name;
}

public void setPassword(String password) {
this.password = password;
}

public String getPassword() {
return password;
}

public void setErrMessage(String errMessage) {
this.errMessage = errMessage;
}

public String getErrMessage() {
return errMessage;
}

public String verify() {
if (!name.equals("justin") || !password.equals("123456")) {
errMessage = "错误 ";
return "failure";
} else {
return "success";
}
}
}

另一个方法是实作javax.faces.event.ValueChangeListener接口,并定义其processValueChange()方法,例如:

SomeListener.java

package wsz.ncepu;

import javax.faces.event.ValueChangeEvent;
import javax.faces.event.ValueChangeListener;

public class SomeListener implements ValueChangeListener {
public void processValueChange(ValueChangeEvent event) {
System.out.println("en".equals(wsz.ncepu.UserBean.locale));

if ("en".equals(wsz.ncepu.UserBean.locale))

wsz.ncepu.UserBean.locale = "zh_CN";
else
wsz.ncepu.UserBean.locale = "en";

}

}

然后在JSF页面上使用<f:valueChangeListener>卷标,并设定其type属性,例如:

<h:selectOneMenu value="#{user.locale}"
onchange="this.form.submit();">
<f:valueChangeListener type="wsz.ncepu.SomeListener" />
<f:selectItem itemValue="zh_CN" itemLabel="Chinese" />
<f:selectItem itemValue="en" itemLabel="English" />
</h:selectOneMenu>

完整的index.jsp

<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@page contentType="text/html;charset=UTF8"%>
<f:view locale="#{user.locale}">

<html>
<head>
<title><h:outputText value="#{msgs.titleText}" />
</title>
</head>
<body>
<f:loadBundle basename="messages" var="msgs" />
<h:form>

<h:selectOneMenu value="#{user.locale}"
onchange="this.form.submit();">
<f:valueChangeListener type="wsz.ncepu.SomeListener" />
<f:selectItem itemValue="zh_CN" itemLabel="Chinese" />
<f:selectItem itemValue="en" itemLabel="English" />
</h:selectOneMenu>

<h3>
<h:outputText value="#{msgs.hintText}" />
</h3>
<h:outputText value="#{msgs.nameText}" />:
<h:inputText value="#{user.name}" />
<p>
<h:outputText value="#{msgs.passText}" />
:
<h:inputSecret value="#{user.password}" />
<p>
<h:commandButton value="#{msgs.commandText}"
action="#{user.verify}" />
</h:form>
</body>
</html>

</f:view>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: