原创文章,鼓励转载,请务必注明出处,作者:李佳
最近项目中用到jsf+spring+hibernate, 顺便做了个小例子,我已经调试通过了,分享给大家.
1.InfoBean
package com.jsf;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.vo.UserVO;
import com.web.bean.UserBean;
import com.bo.UserService;
import com.framework.web.bean.BaseManagedBean;
public class InfoBean extends BaseManagedBean {
private static final Log log = LogFactory.getLog(InfoBean.class);
private static final long serialVersionUID = 1L;
private UserBean userBean = null;
private String username = null;
private String email = null;
private String response = null;
private long maximum = 0;
private long minimum = 0;
private boolean maximumSet = false;
private boolean minimumSet = false;
public InfoBean() {
}
public String submitPersonInfo() {
log.info(username);
log.info(email);
//jsf-spring 1 ok
//UserService userService = (UserService)getbean("userService");
//jsf-spring 2 ok
UserService userService = (UserService) getUserBean().getUserService();
UserVO userVO = new UserVO();
userVO.setUsername(username);
userVO.setEmail(email);
boolean flag = userService.saveUser(userVO);
if (flag) {
setResponse("register success");
return "success";
} else {
setResponse("register failed");
return "failure";
}
}
public UserBean getUserBean() {
if (userBean == null) {
userBean = (UserBean) getWebbean("UserBean");
}
return userBean;
}
public void setUserBean(UserBean userBean) {
this.userBean = userBean;
}
public void setMaximum(long maximum) {
this.maximum = maximum;
this.maximumSet = true;
}
public void setMinimum(long minimum) {
this.minimum = minimum;
this.minimumSet = true;
}
public void setResponse(String response) {
this.response = response;
}
public String getResponse() {
return null;
}
public long getMaximum() {
return maximum;
}
public long getMinimum() {
return minimum;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
2.UserService
package com.bo;
import com.vo.UserVO;
import org.springframework.dao.DataAccessException;
import java.io.Serializable;
public interface UserService extends Serializable {
public boolean saveUser(UserVO userVO) throws DataAccessException;
}
3.UserServiceImpl
package com.bo.impl;
import com.bo.UserService;
import com.dao.UserDAO;
import com.vo.UserVO;
import org.springframework.dao.DataAccessException;
public class UserServiceImpl implements UserService {
private static final long serialVersionUID = 1L;
private UserDAO userDAO;
public UserServiceImpl() {
}
public boolean saveUser(UserVO userVO) throws DataAccessException {
return userDAO.saveUser(userVO);
}
public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
}
public UserDAO getUserDAO() {
return userDAO;
}
}
4.UserDAO
package com.dao;
import org.springframework.dao.DataAccessException;
import com.vo.UserVO;
import java.io.Serializable;
public interface UserDAO extends Serializable{
public boolean saveUser(UserVO userVO)throws DataAccessException;
}
5.UserDAOImpl
package com.dao.impl;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.dao.DataAccessException;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.util.RandomGUID;
import com.vo.UserVO;
import com.dao.UserDAO;
import com.hibernate.UserInfo;
public class UserDAOImpl extends HibernateDaoSupport implements UserDAO {
private static final Log log = LogFactory.getLog(UserDAOImpl.class);
public boolean saveUser(UserVO userVO) throws DataAccessException {
if (userVO == null) {
log.error("save User error");
return false;
}
UserInfo userInfo = new UserInfo();
userInfo.setId(getID());
userInfo.setUsername(userVO.getUsername().trim());
userInfo.setEmail(userVO.getEmail().trim());
this.getHibernateTemplate().save(userInfo);
log.debug("save User ok");
return true;
}
private String getID(){
return RandomGUID.getInatance();
}
}
6.UserVO
package com.vo;
import java.io.Serializable;
public class UserVO implements Serializable{
private String username;
private String email;
public String getEmail(){
return email;
}
public void setEmail(String email){
this.email = email;
}
public String getUsername(){
return username;
}
public void setUsername(String username){
this.username = username;
}
}
7.BaseManagedBean
package com.framework.web.bean;
import java.io.Serializable;
import javax.faces.application.Application;
import javax.faces.context.FacesContext;
import javax.faces.el.ValueBinding;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.springframework.context.ApplicationContext;
import org.springframework.web.jsf.FacesContextUtils;
public class BaseManagedBean implements Serializable{
public static HttpServletRequest request;
public static HttpSession session;
static{
FacesContext context =FacesContext.getCurrentInstance();
request = (HttpServletRequest)context.getExternalContext().getRequest();
session = (HttpSession) context.getExternalContext().getSession(false);
}
public Object getbean(String beanName){
ApplicationContext ac = FacesContextUtils.getWebApplicationContext(FacesContext.getCurrentInstance());
return ac.getBean(beanName);
}
public Object getWebbean(String beanname){
FacesContext context =FacesContext.getCurrentInstance();
Application app = context.getApplication();
ValueBinding binding = app.createValueBinding("#{" + beanname + "}");
Object object = binding.getValue(context);
return object;
}
public String getExternalParameter(String parameter){
FacesContext context =FacesContext.getCurrentInstance();
return context.getExternalContext().getInitParameter(parameter);
}
}
8.UserBean
package com.web.bean;
import com.bo.UserService;
public class UserBean {
private UserService userService = null;
public UserService getUserService() {
return userService;
}
public void setUserService(UserService userService) {
this.userService = userService;
}
}
9.UserInfo
package com.hibernate;
import java.io.Serializable;
//import org.apache.commons.lang.builder.ToStringBuilder;
public class UserInfo implements Serializable{
private String id;
private String username;
private String email;
public UserInfo(String id,String username,String email){
this.id = id;
this.username = username;
this.email = email;
}
public UserInfo(){
}
public UserInfo(String id){
this.id = id;
}
public String getId(){
return id;
}
public void setId(String id){
this.id = id;
}
public String getEmail(){
return email;
}
public void setEmail(String email){
this.email = email;
}
public String getUsername(){
return username;
}
public void setUsername(String username){
this.username = username;
}
// public String toString(){
// return new ToStringBuilder(this).append("id",getId()).toString();
// }
}
10.LoggerAdvice
package com.framework.aop;
import java.lang.reflect.Method;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.log4j.Logger;
import org.springframework.aop.AfterReturningAdvice;
import org.springframework.aop.MethodBeforeAdvice;
public class LoggerAdvice implements MethodBeforeAdvice, AfterReturningAdvice {
public void before(Method method, Object[] args, Object target) throws Throwable {
//web.xml(spring + log4j)
Logger logger = Logger.getLogger(target.getClass());
logger.debug("+Class : "+ target.getClass().getName());
logger.debug("+-------Method : "+ method.getName());
for(int i=0; i<args.length; i++){
logger.debug(" +-arg"+ i + " : " + args[i].toString());
}
}
public void afterReturning(Object retuVal, Method method, Object[] args, Object target) throws Throwable {
//common-logging + log4j
Log log = LogFactory.getLog(target.getClass());
if(retuVal != null){
log.debug("+-------Return : " + retuVal.toString());
}
}
}
11.PhaseChecker
package com.framework.web.lifecycle;
import javax.faces.application.Application;
import javax.faces.context.FacesContext;
import javax.faces.el.ValueBinding;
import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;
import javax.servlet.ServletException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.jsf.InfoBean;
public class PhaseChecker implements PhaseListener {
private static final long serialVersionUID = 1L;
private static final Log log = LogFactory.getLog(PhaseChecker.class);
public void afterPhase(PhaseEvent event) {
log.info(event);
}
public void beforePhase(PhaseEvent event) {
log.info(event);
FacesContext context = event.getFacesContext();
System.out.println("phase run" );
try {
checkSessionObjects(context);
} catch (Exception e) {
e.printStackTrace();
}
}
public PhaseId getPhaseId() {
return PhaseId.RESTORE_VIEW;
}
private void checkSessionObjects(FacesContext context)
throws ServletException {
Application app = context.getApplication();
ValueBinding infoBinding = app.createValueBinding("#{InfoBean}");
InfoBean infoBean = (InfoBean) infoBinding.getValue(context);
if (null == infoBean /*&& null == inqb*/) {
infoBean = new InfoBean();
infoBinding.setValue(context,infoBean);
log.debug("done setting session objects.");
}
}
}
12.RandomGUID
package com.util;
import java.net.*;
import java.util.*;
import java.security.*;
public class RandomGUID extends Object {
public String valueBeforeMD5 = "";
public String valueAfterMD5 = "";
private static Random myRand;
private static SecureRandom mySecureRand;
private static String s_id;
static {
mySecureRand = new SecureRandom();
long secureInitializer = mySecureRand.nextLong();
myRand = new Random(secureInitializer);
try {
s_id = InetAddress.getLocalHost().toString();
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
public RandomGUID() {
getRandomGUID(false);
}
public RandomGUID(boolean secure) {
getRandomGUID(secure);
}
private void getRandomGUID(boolean secure) {
MessageDigest md5 = null;
StringBuffer sbValueBeforeMD5 = new StringBuffer();
try {
md5 = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
System.out.println("Error: " + e);
}
try {
long time = System.currentTimeMillis();
long rand = 0;
if (secure) {
rand = mySecureRand.nextLong();
} else {
rand = myRand.nextLong();
}
sbValueBeforeMD5.append(s_id);
sbValueBeforeMD5.append(":");
sbValueBeforeMD5.append(Long.toString(time));
sbValueBeforeMD5.append(":");
sbValueBeforeMD5.append(Long.toString(rand));
valueBeforeMD5 = sbValueBeforeMD5.toString();
md5.update(valueBeforeMD5.getBytes());
byte[] array = md5.digest();
StringBuffer sb = new StringBuffer();
for (int j = 0; j < array.length; ++j) {
int b = array[j] & 0xFF;
if (b < 0x10) sb.append('0');
sb.append(Integer.toHexString(b));
}
valueAfterMD5 = sb.toString();
} catch (Exception e) {
System.out.println("Error:" + e);
}
}
public String toString() {
String raw = valueAfterMD5.toUpperCase();
StringBuffer sb = new StringBuffer();
sb.append(raw.substring(0, 8));
sb.append("-");
sb.append(raw.substring(8, 12));
sb.append("-");
sb.append(raw.substring(12, 16));
sb.append("-");
sb.append(raw.substring(16, 20));
sb.append("-");
sb.append(raw.substring(20));
return sb.toString();
}
public static String getInatance(){
RandomGUID myGUID = new RandomGUID();
return myGUID.toString();
}
public static void main(String args[]) {
for (int i=0; i< 100; i++) {
RandomGUID myGUID = new RandomGUID();
System.out.println("Seeding String=" + myGUID.valueBeforeMD5);
System.out.println("rawGUID=" + myGUID.valueAfterMD5);
System.out.println("RandomGUID=" + myGUID.toString());
System.out.println("GUID size=" + myGUID.toString().length());
}
}
}
13.CommonSessionListener
package com.util;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class CommonSessionListener implements HttpSessionListener{
private static final Log log = LogFactory.getLog(CommonSessionListener.class);
private static int sessionCount = 0;
public void sessionCreated(HttpSessionEvent se) {
sessionCount++;
System.out.println("sessionCreated:sessionCount = " + sessionCount);
log.info("sessionCreated:SessionListener " + sessionCount + " Created");
}
public void sessionDestroyed(HttpSessionEvent se) {
if (sessionCount > 0){
log.info("sessionDestroyed:SessionListener " + sessionCount + " Destroyed");
sessionCount--;
System.out.println("sessionDestroyed:sessionCount = " + sessionCount);
}
}
}
14.UserInfo.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.hibernate.UserInfo" table="user">
<id name="id" type="java.lang.String" column="id">
<generator class="assigned" />
</id>
<property name="username" type="java.lang.String"
column="username" length="36">
</property>
<property name="email" type="java.lang.String" column="email"
length="60">
</property>
</class>
</hibernate-mapping>
15.web.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>TestFrame</display-name>
<context-param>
<param-name>javax.faces.CONFIG_FILES</param-name>
<param-value>/WEB-INF/faces-config.xml</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/classes/log4j.properties</param-value>
</context-param>
<listener>
<listener-class>com.util.CommonSessionListener</listener-class>
</listener>
<listener>
<listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<servlet>
<servlet-name>log4j</servlet-name>
<servlet-class>org.springframework.web.util.Log4jConfigServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>-1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>10</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- authorize -->
<security-constraint>
<web-resource-collection>
<web-resource-name>SSL Pages</web-resource-name>
<url-pattern>/*</url-pattern>
<http-method>GET</http-method>
<http-method>PUT</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>BasicRole</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<!-- authenticate(BASIC,DIGEST,FORM,CLIENT-CERT) -->
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
<security-role>
<role-name>BasicRole</role-name>
</security-role>
<!-- INNE BACKUP -->
<!-- security-constraint>
<web-resource-collection>
<web-resource-name>SSL Pages</web-resource-name>
<url-pattern>/apply.start.servlet</url-pattern>
<url-pattern>/apply.step1.servlet</url-pattern>
<url-pattern>/apply.step2.servlet</url-pattern>
<url-pattern>/apply.double.servlet</url-pattern>
<url-pattern>/apply.td.servlet</url-pattern>
<url-pattern>/apply.customer.servlet</url-pattern>
<url-pattern>/apply.night.servlet</url-pattern>
<url-pattern>/apply.wait.servlet</url-pattern>
<url-pattern>/apply.final.servlet</url-pattern>
<url-pattern>/apply.step2.servlet</url-pattern>
<url-pattern>/apply.step2.servlet</url-pattern>
<http-method>GET</http-method>
<http-method>PUT</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
</login-config-->
</web-app>
16.applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean
class="org.springframework.jdbc.datasource.DriverManagerDataSource" id="dataSource">
<property name="driverClassName">
<value>org.hsqldb.jdbcDriver</value>
</property>
<property name="url">
<value>jdbc:hsqldb:hsql://localhost</value>
</property>
<property name="username">
<value>sa</value>
</property>
<property name="password">
<value/>
</property>
</bean>
<bean
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" id="sessionFactory">
<property name="dataSource">
<ref local="dataSource"/>
</property>
<property name="mappingResources">
<list>
<value>com/hibernate/UserInfo.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
<bean
class="org.springframework.orm.hibernate3.HibernateTransactionManager" id="transactionManager">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>
<bean
class="org.springframework.transaction.interceptor.TransactionInterceptor" id="txInterceptor">
<property name="transactionManager">
<ref bean="transactionManager"/>
</property>
<property name="transactionAttributes">
<props>
<prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="save*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<bean class="com.framework.aop.LoggerAdvice" id="loggerAdvice"/>
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="interceptorNames">
<list>
<value>txInterceptor</value>
<value>loggerAdvice</value>
<!-- add new Interceptor -->
</list>
</property>
<!--
<property name="beanNames">
<value>*Service,*Manager</value>
</property>
-->
<property name="beanNames">
<list>
<idref local="userService"/>
<!-- add new Service -->
</list>
</property>
</bean>
<!-- Start UserService -->
<bean class="com.bo.impl.UserServiceImpl" id="userService">
<property name="userDAO" ref="userDAO"/>
</bean>
<bean class="com.dao.impl.UserDAOImpl" id="userDAO">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>
</beans>
17.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>
<managed-bean>
<managed-bean-name>InfoBean</managed-bean-name>
<managed-bean-class>com.jsf.InfoBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>userBean</property-name>
<property-class>com.web.bean.UserBean</property-class>
<value>#{UserBean}</value>
</managed-property>
<managed-property>
<property-name>minimum</property-name>
<property-class>long</property-class>
<value>6</value>
</managed-property>
<managed-property>
<property-name>maximum</property-name>
<property-class>long</property-class>
<value>18</value>
</managed-property>
</managed-bean>
<managed-bean>
<managed-bean-name>UserBean</managed-bean-name>
<managed-bean-class>com.web.bean.UserBean</managed-bean-class>
<managed-bean-scope>application</managed-bean-scope>
<managed-property>
<property-name>userService</property-name>
<property-class>com.bo.UserService</property-class>
<value>#{userService}</value>
</managed-property>
</managed-bean>
<navigation-rule>
<description>JSF Home Page</description>
<from-view-id>/example/home.jsp</from-view-id>
<navigation-case>
<description>success</description>
<from-outcome>success</from-outcome>
<to-view-id>/example/success.jsp</to-view-id>
</navigation-case>
<navigation-case>
<description>failure</description>
<from-outcome>failure</from-outcome>
<to-view-id>/example/failure.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/example/success.jsp</from-view-id>
<navigation-case>
<from-outcome>su</from-outcome>
<to-view-id>/example/home.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/example/failure.jsp</from-view-id>
<navigation-case>
<from-outcome>su</from-outcome>
<to-view-id>/example/home.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<application>
<variable-resolver>
org.springframework.web.jsf.DelegatingVariableResolver
</variable-resolver>
<locale-config>
<default-locale>zh_CN</default-locale>
</locale-config>
</application>
<lifecycle>
<phase-listener>com.framework.web.lifecycle.PhaseChecker</phase-listener>
</lifecycle>
</faces-config>
18.faces-config.xml.bak_1
<?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>
<managed-bean>
<description>InfoBean</description>
<managed-bean-name>InfoBean</managed-bean-name>
<managed-bean-class>com.jsf.InfoBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>minimum</property-name>
<property-class>long</property-class>
<value>6</value>
</managed-property>
<managed-property>
<property-name>maximum</property-name>
<property-class>long</property-class>
<value>18</value>
</managed-property>
</managed-bean>
<navigation-rule>
<description>JSF Home Page</description>
<from-view-id>/example/home.jsp</from-view-id>
<navigation-case>
<description>success</description>
<from-outcome>success</from-outcome>
<to-view-id>/example/success.jsp</to-view-id>
</navigation-case>
<navigation-case>
<description>failure</description>
<from-outcome>failure</from-outcome>
<to-view-id>/example/failure.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/example/success.jsp</from-view-id>
<navigation-case>
<from-outcome>su</from-outcome>
<to-view-id>/example/home.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/example/failure.jsp</from-view-id>
<navigation-case>
<from-outcome>su</from-outcome>
<to-view-id>/example/home.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<application>
<variable-resolver>
org.springframework.web.jsf.DelegatingVariableResolver
</variable-resolver>
<locale-config>
<default-locale>zh_CN</default-locale>
</locale-config>
</application>
</faces-config>
19.home.jsp
<%@ page contentType="text/html; charset=gbk" %><%@ taglib uri=" http://java.sun.com/jsf/core" prefix="f"%>
<%@ taglib uri=" http://java.sun.com/jsf/html" prefix="h"%>
<html>
<head>
<title>
用户注册
</title>
</head>
<br>
<f:view>
<h:form id="helloForm" >
<table border="10" align="center"
bordercolor="#0099CC" cellpadding="6" bordercolorlight="#999999">
<tr>
<td colspan="2" bgcolor="#66CCFF">输入用户注册信息:</td>
</tr>
<tr>
<td>
<div align="right">用户名</div>
</td>
<td>
<h:inputText id="username" value="#{InfoBean.username}">
<f:validateLength minimum="#{InfoBean.minimum}" maximum="#{InfoBean.maximum}" />
</h:inputText>
</td>
</tr>
<tr>
<td>
<div align="right">E_mail</div>
</td>
<td>
<h:inputText id="email" value="#{InfoBean.email}"/>
</td>
</tr>
<tr>
<td colspan="2" bgcolor="#FFFF40">
<span>
<h:message id="message" for="username"/>
</span>
</td>
</tr>
<tr>
<td align="center" colspan="2">
<h:commandButton id="submit" action="#{InfoBean.submitPersonInfo}" value="提交" />
</td>
</tr>
</table>
</h:form>
</f:view>
</html>
20.success.jsp
<%@ page contentType="text/html; charset=gbk" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<html>
<head>
<title>
用户注册成功
</title>
</head>
<body bgcolor="white">
<f:view>
<h:form id="responseForm">
<h:graphicImage id="successImg"
url="images/form-success.jpg" alt="注册成功!"/>
<h2>
<h:outputText id="result"
value="#{InfoBean.response}"/></h2>
<h:commandButton id="back"
value="返回" action="su"/>
<p>
</h:form>
</f:view>
</html>
21.failure.jsp
<%@ page contentType="text/html; charset=gbk" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<html>
<head>
<title>
用户注册失败
</title>
</head>
<body bgcolor="white">
<f:view>
<h:form id="responseForm">
<h:graphicImage id="successImg"
url="images/form-error.jpg" alt="注册失败!"/>
<h2>
<h:outputText id="result"
value="#{InfoBean.response}"/></h2>
<h:commandButton id="back"
value="返回" action="su"/>
<p>
</h:form>
</f:view>
</html>
22.index.jsp
<html>
<head>
</head>
<body>
<jsp:forward page="/example/home.faces" />
</body>
</html>
23.log4j.properties
log4j.rootLogger=DEBUG, CONSOLE, FILE, ROLLING_FILE
log4j.addivity.org.apache=true
#console
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Threshold=ERROR
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n
#A1
#log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
#log4j.appender.A1.Threshold=ERROR
#log4j.appender.A1.File=C:/eclipseworkspace/TestFrame/A1.log
#log4j.appender.A1.DatePattern=yyyyMMdd-HH'.log'
#log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout
#file
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.Threshold=INFO
log4j.appender.FILE.File=C:/eclipseworkspace/TestFrame/FILE.log
log4j.appender.FILE.Append=false
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}/:%L - %m%n
# Use this layout for LogFactor 5 analysis
#file rolling
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLING_FILE.Threshold=DEBUG
log4j.appender.ROLLING_FILE.File=C:/eclipseworkspace/TestFrame/ROLLING_FILE.log
log4j.appender.ROLLING_FILE.Append=true
log4j.appender.ROLLING_FILE.MaxFileSize=100KB
log4j.appender.ROLLING_FILE.MaxBackupIndex=5
log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.ROLLING_FILE.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
24.weblogic.xml
<!DOCTYPE weblogic-web-app PUBLIC "-//BEA Systems, Inc.//DTD Web Application 8.1//EN" "http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd">
<weblogic-web-app>
<container-descriptor>
<prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>
<context-root>/</context-root>
<security-role-assignment>
<role-name>BasicRole</role-name>
<principal-name>Administrators</principal-name>
</security-role-assignment>
</weblogic-web-app>