有一个员工实体类:Employeepublic class Employee implements java.io.Serializable { // Fields private static final long serialVersionUID = 5106663630382037556L;
private String sn;
private Position position;
private Department department;
private String password;
private String name;
private String status; // Constructors /** default constructor */
public Employee() {
} // Property accessors
/**
 * @return 工号
 */
public String getSn() {
return this.sn;
} public void setSn(String sn) {
this.sn = sn;
}
/**
 * @return 职务
 */
public Position getPosition() {
return this.position;
} public void setPosition(Position position) {
this.position = position;
}
/**
 * @return 部门
 */
public Department getDepartment() {
return this.department;
} public void setDepartment(Department department) {
this.department = department;
}

/**
 * @return 密码
 */
public String getPassword() {
return this.password;
} public void setPassword(String password) {
this.password = password;
}

/**
 * @return 姓名
 */
public String getName() {
return this.name;
} public void setName(String name) {
this.name = name;
}

/**
 * @return 状态
 */
public String getStatus() {
return this.status;
} public void setStatus(String status) {
this.status = status;
}
}Action类/**
 * 用户登录action
 * @author 北大青鸟
 * @version 1.0
 */
public class UserAction extends ActionSupport { private static final long serialVersionUID = 1L; private final Log logger = LogFactory.getLog(getClass()); private Employee employee; private EmployeeService employeeService; /**
 * 用户登录。
 * @return
 * @throws Exception
 */
public String login() throws Exception { Employee newEmployee = null; try {
System.out.println(employee.getName());
employee.setPassword(new MD5(employee.getPassword()).compute()); newEmployee = employeeService.login(employee); if (logger.isDebugEnabled()) {
logger.debug("---------------" + newEmployee.getName());
} } catch (Exception e) {
e.printStackTrace();
logger.error(e.getMessage());
} String ret = INPUT;
if (newEmployee == null) {
ret = INPUT;
} else {
ActionContext ac = ActionContext.getContext();
ac.getSession().put("employee", newEmployee);
//获取职员职务信息,并获得职务名称
String nameCn = newEmployee.getPosition().getNameCn();
if ("员工".equals(nameCn)) {
ret = "staff";
ClaimVoucher claimVoucher = new ClaimVoucher();
claimVoucher.setStatus(Constants.CLAIMVOUCHER_CREATED);
claimVoucher.setId(0);
ac.getSession().put("claimVoucher", claimVoucher);
} else if ("部门经理".equals(nameCn)) {
ret = "deptManager";
} else if ("总经理".equals(nameCn)) {
ret = "manager";
} else if ("财务".equals(nameCn)) {
ret = "cashier";
}
} return ret; }
       //其他get/set方法省略
}登录页面login.jsp
<s:form action="login">
<s:textfield name="employee.name" label="用户名" />
<s:password name="employee.password" label="密码" />
<s:submit value="登录"></s:submit>
</s:form>
异常:
发现Action里面的employee对象的passowrd是客户端表单输入的值,name的值竟然是null,百思不得其解,异常信息如下:java.lang.Exception: 登录过程错误!
at cn.jbit.jboa.service.impl.EmployeeServiceImpl.login(EmployeeServiceImpl.java:39)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:108)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
at $Proxy0.login(Unknown Source)
at cn.jbit.jboa.action.UserAction.login(UserAction.java:45)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:441)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:280)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:243)
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:165)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:252)
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:179)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:130)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:165)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:179)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:488)
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)

解决方案 »

  1.   

    at cn.jbit.jboa.service.impl.EmployeeServiceImpl.login(EmployeeServiceImpl.java:39)
    at cn.jbit.jboa.action.UserAction.login(UserAction.java:45)
    到指定类的指定行看下
      

  2.   

    private Employee employee; 这个有问题 
      

  3.   

    楼主是不是该对employee加个get、set方法
      

  4.   

    对于employee属性,有个get方法
    public void setEmployee(Employee employee) {
    this.employee = employee;
    }
    没set
      

  5.   

    对于employee属性,有个get方法
    public void setEmployee(Employee employee) {
    this.employee = employee;
    }
    没set
      

  6.   

    对于employee属性,有个get方法
    public void setEmployee(Employee employee) {
    this.employee = employee;
    }
    没set
      

  7.   


    另外,你的命名不够规范。
    Employee.java中的命名,比如:name,写成userName岂不更好?