目錄結構:
Root
--Web Pages
--login.xhtml
--index.html
--error.html
--WEB-INF
--web.xml
--sources Packages
--org
--b3log
--application
--Login.java
--entity
--User.java
pom.xml
JSF2.0省去了大量的陪值,主要原因是納入了Facelets。省去了faces-config.xml中的大量配置。
<managed-bean><br /> <managed-bean-name>user</managed-bean-name><br /> <managed-bean-class><br /> com.corejsf.UserBean<br /> </managed-bean-class><br /> <managed-bean-scope>session</managed-bean-scope><br /> </managed-bean>
不需要
<navigation-rule> <navigation-case> <from-view-id>/pages/login.xhtml</from-view-id> <outcome>places</outcome> <to-view-id>/pages/places.xhtml</to-view-id> </navigation-case></navigation-rule>
這樣複雜的導航規則,只需要通過約定進行絕對路徑來進行導航便可。
例如
<h:form> <h:commandLink action="login" value="Back"/> </h:form>
就可以直接跳轉到同一級目錄下的login.xhtml頁面。
也可以根據java 應用代碼中返回的String來進行頁面的跳轉。
例如
public String login(final String password) { if (password.equals("Vanessa")) { return "index"; } return "error"; }
以往 JSF 的運算式不支援參數的傳遞,現在我們可以通過配置相關的設定檔來實現
1.通過 Maven 擷取需要的依賴
<dependencies><br /> <dependency><br /> <groupId>javax.el</groupId><br /> <artifactId>el-api</artifactId><br /> <version>2.1.2-b05</version><br /> </dependency><br /> <dependency><br /> <groupId>org.jboss.el</groupId><br /> <artifactId>jboss-el</artifactId><br /> <version>2.0.1.GA</version><br /> </dependency><br /> </dependencies><br /><repositories><br /> <repository><br /> <id>sun</id><br /> <url>http://download.java.net/maven/2/</url><br /> </repository><br /> <repository><br /> <id>java.net</id><br /> <url>http://download.java.net/maven/2</url><br /> </repository><br /> <repository><br /> <id>jboss.org</id><br /> <url>http://repository.jboss.org/maven2</url><br /> </repository><br /> </repositories>
2. 在 web.xml 中配置一個 expressionFactory
<context-param>
<param-name>com.sun.faces.expressionFactory</param-name>
<param-value>org.jboss.el.ExpressionFactoryImpl</param-value>
</context-param>
3.就可以使用 EL 運算式傳入一個對象
eg:
<h:commandButton value="Login" action="#{login.login(user.password)}"/>
應用解說
使用者輸入使用者名稱和密碼,進行登入
1.登入成功--密碼為“Vanessa”,進入 index.xhtml 頁面,顯示:Welcome,#{user.userName}!
2.登入失敗--密碼不為“Vanessa”,進入 error.xhtml 頁面,提示錯誤原因,點擊Back後返回index.xhtml
部分代碼
--login.xhtml
<?xml version='1.0' encoding='UTF-8' ?><br /><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><br /><html xmlns="http://www.w3.org/1999/xhtml"<br /> xmlns:h="http://java.sun.com/jsf/html"><br /> <head><br /> <title>Welcome Login</title><br /> </head><br /> <body><br /> <h:form><br /> <h:panelGrid columns="2"><br /> <h:outputLabel for="userName" value="User Name"/><br /> <h:inputText id="userName" value="#{user.userName}"/><br /> <h:outputLabel for="password" value="Password"/><br /> <h:inputSecret id="password" value="#{user.password}"/><br /> <h:outputLabel value=""/><br /> <h:commandButton value="Login" action="#{login.login(user.password)}"/><br /> </h:panelGrid><br /> </h:form><br /> </body><br /></html><br />
--index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><br /><html xmlns="http://www.w3.org/1999/xhtml"><br /> <head><br /> <title>Index</title><br /> </head><br /> <body><br /> Welcome, #{user.userName}!<br /> </body><br /></html><br />
--error.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><br /><html xmlns="http://www.w3.org/1999/xhtml"<br /> xmlns:h="http://java.sun.com/jsf/html"><br /> <head><br /> <title>Error</title><br /> </head><br /> <body><br /> The Password is Error!<br /> <h:form><br /> <h:commandLink action="login" value="Back"/><br /> </h:form><br /> </body><br /></html><br />
--Login.java
/*<br /> * To change this template, choose Tools | Templates<br /> * and open the template in the editor.<br /> */<br />package org.b3log.application.jsf;<br />import javax.faces.bean.ManagedBean;<br />import javax.faces.bean.SessionScoped;<br />import org.b3log.entity.User;<br />/**<br /> *<br /> * @author Vanessa<br /> */<br />@ManagedBean(name = "login")<br />@SessionScoped<br />public class Login {<br /> public String login(final String password) {<br /> if (password.equals("Vanessa")) {<br /> return "index";<br /> }<br /> return "error";<br /> }<br />}<br />
--User.java
package org.b3log.entity;<br />import java.io.Serializable;<br />import javax.faces.bean.ManagedBean;<br />import javax.faces.bean.SessionScoped;<br />/**<br /> * This class depicts a user of B3log. This class only describes user's<br /> * information basically, such as user name, email address, etc. The security<br /> * information(i.e. user password, user roles, etc) is depicted in class<br /> * <code>UserAccount</code>.<br /> *<br /> * @author <a href="mailto:lly219@gmail.com" mce_href="mailto:lly219@gmail.com">Liyuan Li</a><br /> * @version 1.0.0.0, Aug 4, 2009<br /> * @see UserAccount<br /> */<br />@ManagedBean(name = "user")<br />@SessionScoped<br />public class User implements Serializable {<br /> private String userName;<br /> private String email;<br /> private String password;<br /> public String getEmail() {<br /> return email;<br /> }<br /> public void setEmail(String email) {<br /> this.email = email;<br /> }<br /> public String getUserName() {<br /> return userName;<br /> }<br /> public void setUserName(String userName) {<br /> this.userName = userName;<br /> }<br /> public String getPassword() {<br /> return password;<br /> }<br /> public void setPassword(String password) {<br /> this.password = password;<br /> }<br />}<br />