日期:2014-05-16  浏览次数:20371 次

JSF入门四(简单的导航)

http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=2630

?

在 第一个JSF程序 中,我们简单的定义了页面的流程由 index.jsp 到 welcome.jsp,接下来我们扩充程序,让它可以根据使用者输入的名称与密码是否正确,决定要显示欢迎信息或是将使用者送回原页面进行重新登入。

?

一、修改一下UserBean:

package bruce.zhao.model;

public class UserBean {

	private String name;
	private String password;
	private String errMessage;

	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.equalsIgnoreCase("Bruce") || !password.equals("123456")) {
			errMessage = "名称或密码错误";
			return "failure";
		} else {
			return "success";
		}
	}
}

在UserBean中,我们增加了密码与错误信息属性,在verify()方法中,我们检查使用者名称与密码,它传回一个字符串,"failure"表示登入错误,并会设定错误信息,而"success"表示登入正确,这个传回的字符串将决定页面的流程。

?

二、faces-config.xml 中的页面流程定义:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE faces-config PUBLIC
"-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"
"http://java.sun.com/dtd/web-facesconfig_1_0.dtd">
<faces-config>
	<navigation-rule>
		<from-view-id>/pages/index.jsp</from-view-id>
		<navigation-case>
			<from-outcome>success</from-outcome>
			<to-view-id>/pages/welcome.jsp</to-view-id>
		</navigation-case>
		<navigation-case>
			<from-outcome>failure</from-outcome>
			<to-view-id>/pages/index.jsp</to-view-id>
		</navigation-case>
	</navigation-rule>
	
	<managed-bean>
		<managed-bean-name>user</managed-bean-name>
		<managed-bean-class>
			bruce.zhao.model.UserBean
	</managed-bean-class>
		<managed-bean-scope>session</managed-bean-scope>
	</managed-bean>
</faces-config>

根据上面的定义,当传回的字符串是"success"时,将前往 welcome.jsp,如果是"failure"的话,将送回 index.jsp。
接下来告诉网页设计人员Bean名称与相关属性,以及决定页面流程的verify名称,我们修改 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=GB2312"%>
<html>
<head>
<title>第一个JSF程序</title>
</head>
<body>
<f:view>
	<h:form>
		<h3>请输入您的名称</h3>
		<h:outputText value="#{user.errMessage}" />
		<p>名称: <h:inputText value="#{user.name}" /></p>
		<p>密码: <h:inputSecret value="#{user.password}" /></p>
		<p><h:commandButton value="送出" action="#{user.verify}" /></p>
	</h:form>
</f:view>
</body>
</html>

?action属性中使用 JSF Expression Language "#{user.verify}",用户点击“送出”button的时候,相当于调用了UserBean的verify方法。outputText里面user.errMessage相当于调用了UserBean的getErrMessage方法,如果这个get方法没有值,就不显示。user.verify如果验证错误,会setErrMessage,这时候再返回index页面,页面上就会有错误信息。