请问struts1.2+spring2.0+hibernate3.2谁有一个能跑的简单程序

请问struts1.2+spring2.0+hibernate3.2谁有一个能跑的简单程序?

我已经建立了N+1次了, 每次都以失败结束,实在受不了了,请帮忙有的发个,再次谢谢 :oops:

这个发个完整的确实很辛苦啊。我只能从我的Acegi练习中截取一部分(其实就是从AppFuse和SpringSide中抄来了的,综合了一下 :D ),楼主适当调整一下(其实,影响你成败的就是那几个配置文件,其它的按部就班,别犯低级错误就行):
[code="java"]
package com.zhaipuhong.portal.dao.hibernate;

import java.io.Serializable;
import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.orm.ObjectRetrievalFailureException;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.zhaipuhong.portal.dao.Dao;

public class BaseDaoHibernate extends HibernateDaoSupport implements Dao {
protected final Log log = LogFactory.getLog(getClass());

/**
 * @see com.zhaipuhong.portal.dao.Dao#saveObject(java.lang.Object)
 */
public Object getObject(Class clazz, Serializable id) {
    Object o = getHibernateTemplate().get(clazz, id);

    if(o == null){
        throw new ObjectRetrievalFailureException(clazz, id);
    }

    return o;
}

/**
 * @see com.zhaipuhong.portal.dao.Dao#getObjects(java.lang.Class)
 */
public List getObjects(Class clazz) {
    return getHibernateTemplate().loadAll(clazz);
}

/**
 * @see com.zhaipuhong.portal.dao.Dao#getObject(java.lang.Class, java.io.Serializable)
 */
public void removeObject(Class clazz, Serializable id) {
    getHibernateTemplate().delete(getObject(clazz, id));
}

/**
 * @see com.zhaipuhong.portal.dao.Dao#saveObject(java.lang.Object)
 */
public void saveObject(Object o) {
    getHibernateTemplate().saveOrUpdate(o);
}

}
[/code]
[code="java"]
package com.zhaipuhong.portal.dao.hibernate;

import java.util.List;

import org.acegisecurity.userdetails.UserDetails;
import org.acegisecurity.userdetails.UserDetailsService;
import org.acegisecurity.userdetails.UsernameNotFoundException;
import org.springframework.dao.DataAccessException;
import org.springframework.orm.ObjectRetrievalFailureException;

import com.zhaipuhong.portal.dao.TUserDao;
import com.zhaipuhong.portal.model.TUser;

public class TUserDaoHibernate extends BaseDaoHibernate implements TUserDao, UserDetailsService {
/**
* @see com.zhaipuhong.portal.dao.TUserDao#getTUser(java.lang.Long)
*/
public TUser getTUser(Long userId) {
TUser user = (TUser)this.getHibernateTemplate().get(TUser.class, userId);

    if(user == null){
        log.warn("Sorroy, user '" + userId + "' not found ...");
        throw new ObjectRetrievalFailureException(TUser.class, userId);
    }

    return user;
}

/**
 * @see com.zhaipuhong.portal.dao.TUserDao#getTUsers(com.zhaipuhong.portal.model.TUser)
 */
public List getTUsers(TUser user) {
    return getHibernateTemplate().find("from TUser u");
}

public void removeTUser(Long userId) {
    // TODO Auto-generated method stub

}

public void saveTUser(TUser user) {
    if(log.isDebugEnabled()){
        log.debug("user's id = " + user.getId());
    }

    getHibernateTemplate().saveOrUpdate(user);

    getHibernateTemplate().flush();
}

     //下面这个方法是做Acegi练习时用的,楼主可以自己取舍
public UserDetails loadUserByUsername(String username)
        throws UsernameNotFoundException, DataAccessException {
    List users = getHibernateTemplate().find("from TUser where username=?", username);

    if(users == null || users.isEmpty()){
        throw new UsernameNotFoundException("user '" + username + "' not found...");
    }else{
        return (UserDetails)users.get(0);
    }
}

}
[/code]
[code="java"]
package com.zhaipuhong.portal.dao.hibernate;

import java.io.Serializable;
import java.util.List;

import com.zhaipuhong.portal.dao.TRoleDao;
import com.zhaipuhong.portal.model.TRole;

public class TRoleDaoHibernate extends BaseDaoHibernate implements TRoleDao {

public TRole getTRoleByName(String rolename) {
    // TODO Auto-generated method stub
    return null;
}

public List getTRoles(TRole role) {
    // TODO Auto-generated method stub
    return null;
}

public void removeTRole(String rolename) {
    // TODO Auto-generated method stub

}

public void saveTRole(TRole role) {
    // TODO Auto-generated method stub

}

}
[/code]
[code="java"]
package com.zhaipuhong.portal.dao;

import java.io.Serializable;
import java.util.List;

public interface Dao {
/**
* get all objects of a particular type
* @param clazz the type of objects
* @return List of objects
*/
public List getObjects(Class clazz);

/**
 * get an object based on class and id.
 * @param clazz model class to lookup, please look out the model class
 * @param id  the identifier of the class
 * @return 
 */
public Object getObject(Class clazz, Serializable id);

/**
 * save an object including that both update and insert
 * @param o the object to save
 */
public void saveObject(Object o);

/**
 * delete an object based on class and id
 * @param clazz  object class
 * @param id  object id
 */
public void removeObject(Class clazz, Serializable id);

}
[/code]
[code="java"]
package com.zhaipuhong.portal.dao;

import java.util.List;

import com.zhaipuhong.portal.model.TUser;

public interface TUserDao extends Dao {
/**
* Get the user base on the userId
* @param userId the user's identify
* @return TUser a user object
*/
public TUser getTUser(Long userId);

/**
 * Get a list of user base on the parameters pass in
 * @param user the user type to look up
 * @return List list of users
 */
public List getTUsers(TUser user );

/**
 * Save the user's information
 * @param user the user object to be saved
 */
public void saveTUser(TUser user);

/**
 * Remove the user by user's identify
 * @param userId the user's identify
 */
public void removeTUser(Long userId);

}
[/code]
[code="java"]
package com.zhaipuhong.portal.dao;

import java.util.List;

import com.zhaipuhong.portal.model.TRole;

public interface TRoleDao extends Dao {
/**
* Get role base on role name
* @param rolename the role name
* @return TRole rose object
*/
public TRole getTRoleByName(String rolename);

/**
 * Get a list of roles base on the parameters role
 * @param role the role type
 * @return List a list of roles
 */
public List getTRoles(TRole role);

/**
 * Save a role object
 * @param role the role object to be saved
 */
public void saveTRole(TRole role);

/**
 * Remove a role base on the role name
 * @param rolename the rose's name
 */
public void removeTRole(String rolename);

}

[/code]
[code="java"]
package com.zhaipuhong.portal.model;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

import org.acegisecurity.GrantedAuthority;
import org.acegisecurity.userdetails.UserDetails;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;

public class TUser extends BaseObject implements Serializable, UserDetails {

// Fields
private static final long serialVersionUID = -7825485833495586451L;
private Long id;
private String username;
private String password;
private String passwordHint;
private String name;
private String phoneNumber;
private String mobileNumber;
private Address address = new Address();;
private String email;
private boolean accountExpired;
private boolean accountLocked;
private boolean accountEnable;
private Integer version;
private String website;
private Set roles = new HashSet();

// Constructors

/** default constructor */
public TUser() {
}

/** minimal constructor */
public TUser(Long id) {
    this.id = id;
}

/** full constructor */
public TUser(Long id, String username, String password, String name,
        String phoneNumber, String mobileNumber, Address address,
        String email, boolean accountExpired, boolean accountLocked,
        boolean accountEnable, Integer version, String website, Set roles) {
    this.id = id;
    this.username = username;
    this.password = password;
    this.name = name;
    this.phoneNumber = phoneNumber;
    this.mobileNumber = mobileNumber;
    this.address = address;
    this.email = email;
    this.accountExpired = accountExpired;
    this.accountLocked = accountLocked;
    this.accountEnable = accountEnable;
    this.version = version;
    this.website = website;
    this.roles = roles;
}

// Property accessors

public Long getId() {
    return this.id;
}

public void setId(Long id) {
    this.id = id;
}

public String getUsername() {
    return this.username;
}

public void setUsername(String username) {
    this.username = username;
}

public String getPassword() {
    return this.password;
}

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

public String getPasswordHint() {
    return passwordHint;
}

public void setPasswordHint(String passwordHint) {
    this.passwordHint = passwordHint;
}

public String getName() {
    return this.name;
}

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

public String getPhoneNumber() {
    return this.phoneNumber;
}

public void setPhoneNumber(String phoneNumber) {
    this.phoneNumber = phoneNumber;
}

public String getMobileNumber() {
    return this.mobileNumber;
}

public void setMobileNumber(String mobileNumber) {
    this.mobileNumber = mobileNumber;
}

public Address getAddress() {
    return this.address;
}

public void setAddress(Address address) {
    this.address = address;
}

public String getEmail() {
    return this.email;
}

public void setEmail(String email) {
    this.email = email;
}

public boolean getAccountExpired() {
    return this.accountExpired;
}

public void setAccountExpired(boolean accountExpired) {
    this.accountExpired = accountExpired;
}

public boolean getAccountLocked() {
    return this.accountLocked;
}

public void setAccountLocked(boolean accountLocked) {
    this.accountLocked = accountLocked;
}

public boolean getAccountEnable() {
    return this.accountEnable;
}

public void setAccountEnable(boolean accountEnable) {
    this.accountEnable = accountEnable;
}

public Integer getVersion() {
    return this.version;
}

public void setVersion(Integer version) {
    this.version = version;
}

public String getWebsite() {
    return this.website;
}

public void setWebsite(String website) {
    this.website = website;
}

public Set getRoles() {
    return this.roles;
}

public void setRoles(Set roles) {
    this.roles = roles;
}

/**
 * @see org.acegisecurity.userdetails.UserDetails#getAuthorities()
 */
public GrantedAuthority[] getAuthorities() {
    // TODO Auto-generated method stub
    //new String[]{"ROLE_HEAD_OF_ENGINEERING"};
    TRole r = new TRole();
    r.setName("ROLE_HEAD_OF_ENGINEERING");  
    Set rs = new HashSet();
    rs.add(r);
    return (GrantedAuthority[]) rs.toArray(new GrantedAuthority[0]);
}

/**
 * @see org.acegisecurity.userdetails.UserDetails#isAccountNonExpired()
 */
public boolean isAccountNonExpired() {
    // TODO Auto-generated method stub
    return !getAccountExpired();
}

/**
 * @see org.acegisecurity.userdetails.UserDetails#isAccountNonLocked()
 */
public boolean isAccountNonLocked() {
    // TODO Auto-generated method stub
    return !getAccountLocked();
}

/**
 * @see org.acegisecurity.userdetails.UserDetails#isCredentialsNonExpired()
 */
public boolean isCredentialsNonExpired() {
    // TODO Auto-generated method stub
    return true;
}

/**
 * @see org.acegisecurity.userdetails.UserDetails#isEnabled()
 */
public boolean isEnabled() {
    // TODO Auto-generated method stub
    return getAccountEnable();
}

@Override
public boolean equals(Object o) {
    if(this == o) return true;
    if(!(o instanceof TUser)) return false;

    final TUser user = (TUser)o;

    if(username != null ? !username.equals(user.getUsername()) : user.getUsername() != null)
        return false;

    return true;
}

@Override
public int hashCode() {
    return (username != null ? username.hashCode() : 0);
}

@Override
public String toString() {
    return new ToStringBuilder(this, ToStringStyle.DEFAULT_STYLE)
        .append("id", this.id)
        .append("username", this.username)
        .append("accountEnable", this.accountEnable).toString();
}

}
[/code]
[code="java"]
package com.zhaipuhong.portal.model;

import java.io.Serializable;

import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;

public class Address extends BaseObject implements Serializable{
private static final long serialVersionUID = -8184668368278258023L;
protected String country;
protected String province;
protected String city;
protected String address;
protected String postCode;

public Address() {
}

public String getCountry() {
    return country;
}
public void setCountry(String country) {
    this.country = country;
}
public String getProvince() {
    return province;
}
public void setProvince(String province) {
    this.province = province;
}
public String getCity() {
    return city;
}
public void setCity(String city) {
    this.city = city;
}
public String getAddress() {
    return address;
}
public void setAddress(String address) {
    this.address = address;
}
public String getPostCode() {
    return postCode;
}
public void setPostCode(String postCode) {
    this.postCode = postCode;
}

@Override
public boolean equals(Object o) {
    if(this == o) return true;
    if(!(o instanceof Address)) return false;

    Address addr = (Address)o;

    if(address != null ? !address.equals(addr.getAddress()) : addr.getAddress() != null)
        return false;
    if(country != null ? !country.equals(addr.getCountry()) : addr.getCountry() != null)
        return false;
    if(province != null ? !province.equals(addr.getProvince()) : addr.getProvince() != null)
        return false;
    if(city != null ? !city.equals(addr.getCity()) : addr.getCity() != null)
        return false;
    if(postCode != null ? !postCode.equals(addr.getPostCode()) : addr.getPostCode() != null)
        return false;

    return false;
}
@Override
public int hashCode() {
    int result;
    result = (address != null ? address.hashCode() : 0);
    result = 29*result + (country != null ? country.hashCode() : 0);
    result = 29*result + (province != null ? province.hashCode() : 0);
    result = 29*result + (city != null ? city.hashCode() : 0);
    result = 29*result + (postCode != null ? postCode.hashCode() : 0);
    return result;
}
@Override
public String toString() {
    return new ToStringBuilder(this, ToStringStyle.DEFAULT_STYLE)
        .append("address", this.address)
        .append("country", this.country)
        .append("province", this.province)
        .append("postCode", this.postCode).toString();
}

}
[/code]
[code="java"]
package com.zhaipuhong.portal.model;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

import org.acegisecurity.GrantedAuthority;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;

/**

  • TRole generated by MyEclipse - Hibernate Tools */

public class TRole extends BaseObject implements Serializable, GrantedAuthority {

// Fields
private static final long serialVersionUID = -5930649302512433094L;
private Long id;
private String name;
private String descn;
private Set users = new HashSet();
private Set permissions = new HashSet();

// Constructors

/** default constructor */
public TRole() {
}

/** minimal constructor */
public TRole(Long id) {
    this.id = id;
}

/** full constructor */
public TRole(Long id, String name, String descn, Set users, Set permissions) {
    this.id = id;
    this.name = name;
    this.descn = descn;
    this.users = users;
    this.permissions = permissions;
}

// Property accessors

public Long getId() {
    return this.id;
}

public void setId(Long id) {
    this.id = id;
}

public String getName() {
    return this.name;
}

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

public String getDescn() {
    return this.descn;
}

public void setDescn(String descn) {
    this.descn = descn;
}

public Set getUsers() {
    return this.users;
}

public void setUsers(Set users) {
    this.users = users;
}

public Set getPermissions() {
    return this.permissions;
}

public void setPermissions(Set permissions) {
    this.permissions = permissions;
}

public String getAuthority() {
    return getName();
}

@Override
public boolean equals(Object o) {
    if(this == o) return true;
    if(!(o instanceof TRole)) return false;

    final TRole role = (TRole)o;

    if(name != null ? name.equals(role.getName()) : role.getName() != null)
        return false;

    return true;
}

@Override
public int hashCode() {
    return (name != null ? name.hashCode() : 0);
}

@Override
public String toString() {
    return new ToStringBuilder(this, ToStringStyle.DEFAULT_STYLE)
        .append("roleid", this.getId())
        .append("name", this.getName()).toString();
}

}
[/code]
[code="java"]
package com.zhaipuhong.portal.model;

import java.io.Serializable;

public abstract class BaseObject implements Serializable {
public abstract String toString();
public abstract boolean equals(Object o);
public abstract int hashCode();
}
[/code]
[code="java"]
package com.zhaipuhong.portal.service.impl;

import java.io.Serializable;
import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.zhaipuhong.portal.dao.Dao;
import com.zhaipuhong.portal.service.Manager;

public class BaseManager implements Manager {
protected final Log log = LogFactory.getLog(getClass());
protected Dao dao = null;

/**
 * @see com.zhaipuhong.portal.service.Manager#setDao(com.zhaipuhong.portal.dao.Dao)
 */
public void setDao(Dao dao) {
    this.dao = dao;
}

/**
 * @see com.zhaipuhong.portal.service.Manager#getObject(java.lang.Class, java.io.Serializable)
 */
public Object getObject(Class clazz, Serializable id) {
    return dao.getObject(clazz, id);
}

/**
 * @see com.zhaipuhong.portal.service.Manager#getObjects(java.lang.Class)
 */
public List getObjects(Class clazz) {
    return dao.getObjects(clazz);
}

/**
 * @see com.zhaipuhong.portal.service.Manager#removeObject(java.lang.Class, java.io.Serializable)
 */
public void removeObject(Class clazz, Serializable id) {
    dao.removeObject(clazz, id);
}

/**
 * @see com.zhaipuhong.portal.service.Manager#saveObject(java.lang.Object)
 */
public void saveObject(Object o) {
    dao.saveObject(o);
}

}
[/code]
[code="java"]
package com.zhaipuhong.portal.service.impl;

import java.util.List;

import org.springframework.dao.DataIntegrityViolationException;

import com.zhaipuhong.portal.dao.TUserDao;
import com.zhaipuhong.portal.model.TUser;
import com.zhaipuhong.portal.service.TUserManager;

public class TUserManagerImpl extends BaseManager implements TUserManager {
private TUserDao dao;

/**
 * @see com.zhaipuhong.portal.service.TUserManager#setTuserDao(com.zhaipuhong.portal.dao.TUserDao)
 */
public void setTuserDao(TUserDao dao) {
    this.dao = dao;
}

/**
 * @see com.zhaipuhong.portal.service.TUserManager#getTUser(java.lang.String)
 */
public TUser getTUser(String userId) {
    return dao.getTUser(new Long(userId));
}

/**
 * @see com.zhaipuhong.portal.service.TUserManager#getTUsers(com.zhaipuhong.portal.model.TUser)
 */
public List getTUsers(TUser user) {
    return dao.getTUsers(user);
}

/**
 * @see com.zhaipuhong.portal.service.TUserManager#removeTUser(java.lang.String)
 */
public void removeTUser(String userId) {
    dao.removeTUser(new Long(userId));
}

/**
 * @throws Exception 
 * @see com.zhaipuhong.portal.service.TUserManager#saveTUser(com.zhaipuhong.portal.model.TUser)
 */
public void saveTUser(TUser user) throws Exception{
    //if a new user, convert the username to lower case
    if(user.getVersion() == null){
        user.setUsername(user.getUsername().toLowerCase());
    }
    try{
        dao.saveTUser(user);
    }catch(DataIntegrityViolationException ex){
        throw new Exception("User '" + user.getUsername() + "' already exists!");
    }
}

}

[/code]
[code="java"]
package com.zhaipuhong.portal.service.impl;

import java.util.List;

import com.zhaipuhong.portal.dao.TRoleDao;
import com.zhaipuhong.portal.model.TRole;
import com.zhaipuhong.portal.service.TRoleManager;

public class TRoleManagerImpl extends BaseManager implements TRoleManager {
private TRoleDao dao;

public void setTroleDao(TRoleDao dao) {
    this.dao = dao;
}

/**
 * @see com.zhaipuhong.portal.service.TRoleManager#getTRole(java.lang.String)
 */
public TRole getTRole(String rolename) {
    return dao.getTRoleByName(rolename);
}

/**
 * @see com.zhaipuhong.portal.service.TRoleManager#getTRoles(com.zhaipuhong.portal.model.TRole)
 */
public List getTRoles(TRole role) {
    return dao.getTRoles(role);
}

/**
 * @see com.zhaipuhong.portal.service.TRoleManager#removeTRole(java.lang.String)
 */
public void removeTRole(String rolename) {
    dao.removeTRole(rolename);
}

/**
 * @see com.zhaipuhong.portal.service.TRoleManager#saveTRole(com.zhaipuhong.portal.model.TRole)
 */
public void saveTRole(TRole role) {
    dao.saveTRole(role);
}

}

[/code]
[code="java"]
package com.zhaipuhong.portal.service;

import java.io.Serializable;
import java.util.List;

import com.zhaipuhong.portal.dao.Dao;

public interface Manager {

/**
 * No special to say
 * @param dao
 */
public void setDao(Dao dao);

/**
 * get a all objects of a particular type
 * @param clazz the type of objects
 * @return List of objects
 */
public List getObjects(Class clazz);

/**
 * 
 * @param clazz model class to look up
 * @param id the identifier of the class
 * @return an object
 */
public Object getObject(Class clazz, Serializable id);

/**
 * save an object
 * @param o the object to save
 */
public void saveObject(Object o);

/**
 * delete an object based on class and id
 * @param clazz model class to look up
 * @param id the identifier of the class
 */
public void removeObject(Class clazz, Serializable id);

}

[/code]
[code="java"]
package com.zhaipuhong.portal.service;

import java.util.List;

import com.zhaipuhong.portal.dao.TUserDao;
import com.zhaipuhong.portal.model.TUser;

public interface TUserManager {
/**
* Set the dao for communication with the data layer
* @param dao the user dao prompt
*/
public void setTuserDao(TUserDao dao);

/**
 * Get the user's information base on the parameters pass in
 * @param userId the user's identify
 * @return TUser the user object
 */
public TUser getTUser(String userId);

/**
 * Get a list of user base on the parameters pass in
 * @param user a user object
 * @return List a list of user
 */
public List getTUsers(TUser user);

/**
 * Save a user
 * @param user the user to be saved
 * @throws Exception 
 */
public void saveTUser(TUser user) throws Exception;

/**
 * Remove a user by the user's id
 * @param userId the user's id
 */
public void removeTUser(String userId);

}

[/code]
[code="java"]
package com.zhaipuhong.portal.service;

import java.util.List;

import com.zhaipuhong.portal.model.TRole;

public interface TRoleManager extends Manager {
/**
* Get the role's information base on the parameters pass in
* @param rolename the role's name
* @return TRole the role object
*/
public TRole getTRole(String rolename);

/**
 * Get a list of role base on the parameters pass in
 * @param role a role object
 * @return List a list of role
 */
public List getTRoles(TRole role);

/**
 * Save a role
 * @param role the role to be saved
 */
public void saveTRole(TRole role);

/**
 * Remove a rolename by the role's name
 * @param rolename the role's name
 */
public void removeTRole(String rolename);

}

[/code]
[code="java"]
package com.zhaipuhong.portal.webapp.action;

import java.util.Date;

import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.converters.IntegerConverter;
import org.apache.commons.beanutils.converters.LongConverter;
import org.apache.struts.actions.DispatchAction;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

public class BaseAction extends DispatchAction {
private static Long defaultLong = null;

/*
 * Register converter tools
 */
static {
    ConvertUtils.register(new LongConverter(defaultLong), Long.class);
    ConvertUtils.register(new IntegerConverter(defaultLong), Integer.class);
}

/**
 * Get initialize bean in spring application context
 * @param name the name of the bean
 * @return Object the bean of request
 */
public Object getBean(String name) {
    ApplicationContext ctx = WebApplicationContextUtils
            .getRequiredWebApplicationContext(servlet.getServletContext());
    return ctx.getBean(name);
}

}

[/code]
[code="java"]
package com.zhaipuhong.portal.webapp.action;

public final class TUserAction extends BaseAction {

}
[/code]
[code="java"]
package com.zhaipuhong.portal.webapp.form;

import java.io.Serializable;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.validator.ValidatorForm;

public class BaseForm extends ValidatorForm implements Serializable{

public boolean equals(Object o){
    return false;
}

public int hashCode(){
    return 0;
}

public String toString(){
    return null;
}

@Override
public ActionErrors validate(ActionMapping mapping,
        HttpServletRequest request) {
    // TODO Auto-generated method stub
    //return super.validate(mapping, request);
    return null;
}

}
[/code]
[code="java"]
package com.zhaipuhong.portal.webapp.form;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

public class TUserForm extends BaseForm implements Serializable {
protected String id;

protected String username;

protected String password;

protected String confirmPassword;

protected String passwordHint;

protected String name;

protected String version;

protected String website;

protected String email;

protected AddressForm address = new AddressForm();

protected Set roles = new HashSet();

protected boolean accountExpire;

protected boolean accountLocked;

protected boolean accountEnable;

public TUserForm() {
}

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public String getUsername() {
    return username;
}

public void setUsername(String username) {
    this.username = username;
}

public String getPassword() {
    return password;
}

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

public String getConfirmPassword() {
    return confirmPassword;
}

public void setConfirmPassword(String confirmPassword) {
    this.confirmPassword = confirmPassword;
}

public String getPasswordHint() {
    return passwordHint;
}

public void setPasswordHint(String passwordHint) {
    this.passwordHint = passwordHint;
}

public String getName() {
    return name;
}

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

public String getVersion() {
    return version;
}

public void setVersion(String version) {
    this.version = version;
}

public String getWebsite() {
    return website;
}

public void setWebsite(String website) {
    this.website = website;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

public AddressForm getAddress() {
    return address;
}

public void setAddress(AddressForm address) {
    this.address = address;
}

public Set getRoles() {
    return roles;
}

public void setRoles(Set roles) {
    this.roles = roles;
}

public boolean isAccountExpire() {
    return accountExpire;
}

public void setAccountExpire(boolean accountExpire) {
    this.accountExpire = accountExpire;
}

public boolean isAccountLocked() {
    return accountLocked;
}

public void setAccountLocked(boolean accountLocked) {
    this.accountLocked = accountLocked;
}

public boolean isAccountEnable() {
    return accountEnable;
}

public void setAccountEnable(boolean accountEnable) {
    this.accountEnable = accountEnable;
}

}

[/code]
[code="java"]
package com.zhaipuhong.portal.webapp.form;

import java.io.Serializable;

public class AddressForm extends BaseForm implements Serializable {
protected String address;

protected String country;

protected String province;

protected String city;

protected String postCode;

public AddressForm() {
}

public String getAddress() {
    return address;
}

public void setAddress(String address) {
    this.address = address;
}

public String getCountry() {
    return country;
}

public void setCountry(String country) {
    this.country = country;
}

public String getProvince() {
    return province;
}

public void setProvince(String province) {
    this.province = province;
}

public String getCity() {
    return city;
}

public void setCity(String city) {
    this.city = city;
}

public String getPostCode() {
    return postCode;
}

public void setPostCode(String postCode) {
    this.postCode = postCode;
}

}

[/code]
[code="java"]
package com.zhaipuhong.portal.webapp.form;

import java.io.Serializable;

import javax.servlet.ServletRequest;

import org.apache.struts.action.ActionMapping;

public class TRoleForm extends BaseForm implements Serializable {

public TRoleForm() {
}

@Override
public void reset(ActionMapping mapping, ServletRequest request) {
    // TODO Auto-generated method stub
    //super.reset(mapping, request);
}

}
[/code]

本人认为下面的文件才是重要的,上面的东西其实都差不多。

web.xml,其中楼主可以考虑取舍。
[code="java"]
<?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">


Portal WebSite

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext-*.xml</param-value>
</context-param>

<filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<filter>
    <filter-name>acegiFilter</filter-name>
    <filter-class>org.acegisecurity.util.FilterToBeanProxy</filter-class>
    <init-param>
        <param-name>targetClass</param-name>
        <param-value>org.acegisecurity.util.FilterChainProxy</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>*.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
    <filter-name>acegiFilter</filter-name>
    <url-pattern>/j_security_check</url-pattern>
</filter-mapping>
<filter-mapping>
    <filter-name>acegiFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    <load-on-startup>2</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

<session-config>
    <session-timeout>15</session-timeout>
</session-config>

<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

<error-page>
    <error-code>500</error-code>
    <location>/error.jsp</location>
</error-page>
<error-page>
    <error-code>400</error-code>
    <location>/index.jsp</location>
</error-page>
<error-page>
    <error-code>403</error-code>
    <location>/403.jsp</location>
</error-page>
<error-page>
    <error-code>404</error-code>
    <location>/404.jsp</location>
</error-page>


[/code]

struts-config.xml
[code="java"]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">





<global-forwards>
    <forward name="logout" path="index.jsp"/>
</global-forwards>

<action-mappings>
    <action path="/saveUser" type="com.zhaipuhong.portal.webapp.action.TUserAction" name="userForm" scope="request" validate="false">
        <forward name="list" path="/WEB-INF/pages/usermgr/userList.jsp" redirect="false"/>
    </action>
</action-mappings>


[/code]

applicationContext-resources.xml,配置数据源
[code="java"]
<?xml version="1.0" encoding="UTF-8"?>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/portal"/>
    <property name="username" value="portal"/>
    <property name="password" value="123456"/>
    <property name="maxActive" value="100"/>
    <property name="maxIdle" value="30"/>
    <property name="maxWait" value="1000"/>
    <property name="defaultAutoCommit" value="true"/>
    <property name="removeAbandoned" value="true"/>
    <property name="removeAbandonedTimeout" value="60"/>
    <property name="logAbandoned" value="true"/>
</bean>


[/code]

applicationContext-service.xml,配置业务层事务和逻辑
[code="java"]
<?xml version="1.0" encoding="UTF-8"?>
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">

<aop:config>
    <aop:advisor id="managerTx" advice-ref="txAdvice" pointcut="execution(* *..service.*Manager.*(..))"/>
</aop:config>

<tx:advice id="txAdvice">
    <tx:attributes>
        <tx:method name="get*" read-only="true"/>
        <tx:method name="*"/>
    </tx:attributes>
</tx:advice>

<bean id="manager" class="com.zhaipuhong.portal.service.impl.BaseManager">
    <property name="dao" ref="dao"/>
</bean> 
<bean id="tUserManager" class="com.zhaipuhong.portal.service.impl.TUserManagerImpl">
    <property name="tuserDao" ref="tuserDao"/>
</bean>

<bean id="tRoleManager" class="com.zhaipuhong.portal.service.impl.TRoleManagerImpl">
    <property name="troleDao" ref="troleDao"/>
</bean>


[/code]

applicationContext-hibernate.xml,配置hibernate
[code="java"]
<?xml version="1.0" encoding="UTF-8"?>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

<!-- Hibernate SessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="mappingResources">
        <list>
            <value>com/zhaipuhong/portal/model/TUser.hbm.xml</value>
            <value>com/zhaipuhong/portal/model/TRole.hbm.xml</value>            </list>
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
            <prop key="hibernate.query.substitutions">true '1', false '0'</prop>
            <prop key="hibernate.show_sql">true</prop>
        </props>
    </property>
</bean>

<!-- Hibernate Transaction Manager -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>

<!-- Base Dao -->
<bean id="dao" class="com.zhaipuhong.portal.dao.hibernate.BaseDaoHibernate">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>

<!-- TUserDao's Hibernate Implementation -->
<bean id="tuserDao" class="com.zhaipuhong.portal.dao.hibernate.TUserDaoHibernate">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>

<!-- TRoleDao's Hibernate Implementation -->
<bean id="troleDao" class="com.zhaipuhong.portal.dao.hibernate.TRoleDaoHibernate">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>


[/code]

applicationContext-security.xml,以为是acegi练习,少不了有个配置文件了
[code="java"]
<?xml version="1.0" encoding="UTF-8"?>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">

<!-- ========================= Filter Chain ============================ -->
<bean id="filterChainProxy" class="org.acegisecurity.util.FilterChainProxy">
    <property name="filterInvocationDefinitionSource">
        <value>
            CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
            PATTERN_TYPE_APACHE_ANT
            /**=httpSessionContextIntegrationFilter,logoutFilter,authenticationProcessingFilter,securityContextHolderAwareRequestFilter,anonymousProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor
        </value>
    </property>
</bean>

<!-- Access authentication object -->
<bean id="httpSessionContextIntegrationFilter"
    class="org.acegisecurity.context.HttpSessionContextIntegrationFilter" />

<!-- Clear after logout -->
<bean id="logoutFilter"
    class="org.acegisecurity.ui.logout.LogoutFilter">
    <constructor-arg value="/logoutSuccess.jsp" />  <!-- logout success to redirecte to -->
    <constructor-arg>
        <list>
            <bean class="org.acegisecurity.ui.logout.SecurityContextLogoutHandler" />
        </list>
    </constructor-arg>
</bean>

<!-- Process authentication request -->
<bean id="authenticationProcessingFilter"
    class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilter">
    <property name="authenticationManager" ref="authenticationManager" />
    <property name="authenticationFailureUrl" value="/login.jsp?login_error=1" /> <!-- login failure to redirected to -->
    <property name="defaultTargetUrl" value="/protected/protected1.jsp" /> <!-- login success to redirecte to -->
    <property name="filterProcessesUrl" value="/j_security_check" /> <!-- login request action -->
</bean>

<!-- Decorate HttpServletRequest which container request parameters,header,Date,cookies etc. -->
<bean id="securityContextHolderAwareRequestFilter"
    class="org.acegisecurity.wrapper.SecurityContextHolderAwareRequestFilter" />

<!-- Configure anonymous user and authentication -->
<bean id="anonymousProcessingFilter"
    class="org.acegisecurity.providers.anonymous.AnonymousProcessingFilter">
    <property name="key" value="anonymous" />
    <property name="userAttribute" value="anonymous,ROLE_ANONYMOUS" />
</bean>

<!-- Configure the map relation of exception & URL -->
<bean id="exceptionTranslationFilter"
    class="org.acegisecurity.ui.ExceptionTranslationFilter">
    <property name="authenticationEntryPoint">
        <bean
            class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilterEntryPoint">
            <property name="loginFormUrl" value="/login.jsp" />
        </bean>
    </property>
    <property name="accessDeniedHandler">
        <bean
            class="org.acegisecurity.ui.AccessDeniedHandlerImpl">
            <property name="errorPage" value="/accessDenied.jsp" />
        </bean>
    </property>
</bean>

<!-- Configure the map relation of the URL & Role -->
<bean id="filterInvocationInterceptor"
    class="org.acegisecurity.intercept.web.FilterSecurityInterceptor">
    <property name="authenticationManager" ref="authenticationManager" />
    <property name="accessDecisionManager" ref="accessDecisionManager" />
    <property name="objectDefinitionSource">
        <value>
            CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
            PATTERN_TYPE_APACHE_ANT 
            /protected/**=ROLE_HEAD_OF_ENGINEERING
            /**=IS_AUTHENTICATED_ANONYMOUSLY
        </value>
    </property>
</bean>

<!-- Authentication manager -->
<bean id="authenticationManager"
    class="org.acegisecurity.providers.ProviderManager">
    <property name="providers">
        <list>
            <ref local="daoAuthenticationProvider" />
        </list>
    </property>
</bean>

<!-- Access decision vote manager -->
<bean id="accessDecisionManager" class="org.acegisecurity.vote.AffirmativeBased">
    <property name="allowIfAllAbstainDecisions"
            value="false" />
        <property name="decisionVoters">
            <list>
                <bean class="org.acegisecurity.vote.RoleVoter" />
                <bean class="org.acegisecurity.vote.AuthenticatedVoter" />
            </list>
        </property>
</bean>

<!-- DAO authentication provider which get the user's information from database -->
<bean id="daoAuthenticationProvider"
    class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">
    <!--property name="userDetailsService" ref="userDetailsService" /-->
    <property name="userDetailsService" ref="tuserDao" />
    <!-- UserCache property will activate the cache, it is not 
    mandatory but increases performance by cacheing the user 
    details retrieved from user-base -->
    <property name="userCache" ref="userCache"/>
</bean>

<!-- Access user's username and password -->
<bean id="userDetailsService" class="org.acegisecurity.userdetails.memory.InMemoryDaoImpl">
    <property name="userProperties">
        <bean class="org.springframework.beans.factory.config.PropertiesFactoryBean">
            <property name="location" value="/WEB-INF/users.properties" />
        </bean>
    </property>
</bean>

<!-- Cache user's information -->
<bean id="userCache" class="org.acegisecurity.providers.dao.cache.EhCacheBasedUserCache">
            <property name="cache">
                <bean
                    class="org.springframework.cache.ehcache.EhCacheFactoryBean">
                    <property name="cacheManager">
                        <bean
                            class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" />
                    </property>
                    <property name="cacheName" value="userCache" />
                </bean>
            </property>
</bean>

<!-- This bean is optional; it isn't used by any other bean as it only listens and logs -->
<bean id="loggerListener" class="org.acegisecurity.event.authentication.LoggerListener" />


[/code]

web根目录下登陆的JSP(login.jsp)的form片段:
[code="java"]
……

Username : alice
Password : 123
User Name Password

……
[/code]

web根目录下的logoutSuccess.jsp,与acegi匹配的页面,因为在配置文件中配置了的,所以必须也贴出来
[code="java"]


Acegi sample application: Logout successfully

Logout successfully !



Go to Homepage


Login to sample application

[/code]

根目录下的\protected\protected1.jsp页面,与acegi匹配的页面,因为在配置文件中配置了的,所以必须也贴出来
[code="java"]


Acegi sample application: Protected 1

PROTECTED RESOURCE 1 !



View protected resource 2




Logout

[/code]

根目录下的\protected\protected2.jsp页面,与acegi匹配的页面,因为在配置文件中配置了的,所以必须也贴出来
[code="java"]


Acegi sample application: Protected 2

PROTECTED RESOURCE 2 !



View protected resource 1




Logout


[/code]

楼主仔细看看配置文件啊,其它的都没什么的,配置文件的细微资源,如错误页面,跳转页面等根据自己的实际修改。主干不变就行了。

我就只能帮到这个地方了 :wink: