本帖最后由 IAMWilliamLee 于 2014-09-10 15:37:50 编辑

解决方案 »

  1.   

    <action name="person" class="com.bonc.action.PersonAction">
                <result name="add">/pages/addPerson.jsp</result>
                <result name="success">/pages/success.jsp</result>
            </action>
    这块应该加上method属性,
    <action name="person" class="com.bonc.action.PersonAction" method="add" >
                <result name="add">/pages/addPerson.jsp</result>
                <result name="success">/pages/success.jsp</result>
            </action>
      

  2.   

    person 有没有getter  setter 方法?
      

  3.   

     <package name="person" namespace="" extends="struts-default">
            <action name="person" class="com.bonc.action.PersonAction">
    请问namespace="" 意味着什么?个人觉得可能是这里出了问题
      

  4.   

    这里namespace应该是和不写是一样的,之前是"/"同样不行,namespace应该匹配form里面action吧。
      

  5.   

    能把action 的代码贴一下吗
      

  6.   

    action:package com.bonc.action;import java.util.Date;import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;import org.apache.struts2.ServletActionContext;
    import org.omg.CORBA.Request;import com.bonc.bean.Person;
    import com.bonc.service.IPersonService;
    import com.bonc.util.PersonUtil;
    import com.opensymphony.xwork2.Action;
    import com.opensymphony.xwork2.ActionSupport;public class PersonAction extends ActionSupport {
    private IPersonService<Person> personService;
    private Person person;
    private String passWdConfirm;
    /**
     * 用户注册
     * @return
     */
    public String initAdd(){
    return "add";
    }

    public String add(){
    HttpServletRequest req = ServletActionContext.getRequest();
    HttpServletResponse resp = ServletActionContext.getResponse();
    person.setIpCreated(req.getRemoteAddr());
    person.setIpLastActived(req.getRemoteAddr());
    person.setDateCreated(new Date());
    person.setDateLaseActived(new Date());
    if(person.getAccount()==null||person.getAccount().trim().length()==0){
    req.setAttribute("message", "请输入账号");
    return "add";
    }
    if(person.getPassword()==null||person.getPassword().trim().length()==0
    ||!person.getPassword().equals(passWdConfirm)){
    req.setAttribute("message", "密码不一致");
    return "add";
    }

    try{
    personService.create(person);
    PersonUtil.setPersonInfo(req, resp, person);
    return Action.SUCCESS;
    } catch(Exception e) {
    req.setAttribute("message", "注册失败,原因:"+e.getMessage());
    return "add";

    }
    }

    public IPersonService<Person> getPersonService() {
    return personService;
    } public void setPersonService(IPersonService<Person> personService) {
    this.personService = personService;
    } public Person getPerson() {
    return person;
    } public void setPerson(Person person) {
    this.person = person;
    } public String getPassWdConfirm() {
    return passWdConfirm;
    } public void setPassWdConfirm(String passWdConfirm) {
    this.passWdConfirm = passWdConfirm;
    }

    }
      

  7.   

    是不是action中的class写错了???
    jsp页面最好放在WEB-INF下面
      

  8.   

    还是不行错误没变化。
    你页面写的add.action对应的是这里面的name属性,
    <action name="add" class="com.bonc.action.PersonAction" method="add" >
                <result name="add">/pages/addPerson.jsp</result>
                <result name="success">/pages/success.jsp</result>
            </action>
    关于你说的namespace是指命名空间,你可以指定他去哪个空间找这个action的方法,
    比如:<package name="person" namespace="person" extends="struts-default">你这里设置成person
    只要你在页面  <s:form id="add" action="person!add.action" method="post" namespace="/person">指定一下就行
      

  9.   

    还是不行错误没变化。
    你页面写的add.action对应的是这里面的name属性,
    <action name="add" class="com.bonc.action.PersonAction" method="add" >
                <result name="add">/pages/addPerson.jsp</result>
                <result name="success">/pages/success.jsp</result>
            </action>
    关于你说的namespace是指命名空间,你可以指定他去哪个空间找这个action的方法,
    比如:<package name="person" namespace="person" extends="struts-default">你这里设置成person
    只要你在页面  <s:form id="add" action="person!add.action" method="post" namespace="/person">指定一下就行
    不行的话,你这样写: <s:form id="add" action="add.action" method="post" namespace="/person">
      

  10.   

    action="person!add.action",这是什么意思?没见过这样的,和struts配置文件中的action相匹配吗
      

  11.   

    我的意图是调用personaction中的add方法
      

  12.   

    person!add.action这个应该是person!add吧,你试试
      

  13.   

    debug一下,看下有没有进入方法,如果没有进入方法,那就是action没访问到了
      

  14.   

    问题解决了,将web.xml中struts配置改一下       <init-param>  
               <param-name>config</param-name>  
               <param-value>struts-default.xml,struts-plugin.xml,/WEB-INF/classes/struts.xml</param-value>  
           </init-param>   去掉这段,原因现在还不太明白