本人是新手绝对的新手 不是计算机专业出身,完全自学了SSH,第一次将自己的所学集中起来凭着自己的感觉做一个小demo来玩,但是发现一个问题那就是,jsp表单中提交的一些数据,到了相应的action中全部为null,百思不得其解,我本人不在软件公司上班,从事的行业也不是软件行业所以找不到大牛帮我解决问题,现在求助各位论坛高手帮忙。
不罗嗦上代码:<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'addNewBasicUser.jsp' starting page</title>
    
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">    
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->  </head>
  
  <body>
    <form action="rootuser/addOneNewBranch" method="post">
     用户名:<input type="text" name="username"/><br/>
     密码:<input type="text" name="password"/><br/>
     支行名称:<input type="text" name="branchbankname"/><br/>
     <input type="submit" value="提交"/>
    </form>
  </body>
</html>这是对应的action类package com.actions;import javax.annotation.Resource;import com.dao.interfaceImp.BasicUserDaoImp;
import com.xu.model.BasicUser;
import com.xu.utils.MD5;public class AddNewBranchBank {
private String username;
private String password;
private String branchbankname;
private BasicUserDaoImp budi;
public BasicUserDaoImp getBudi() {
return budi;
}
@Resource(name="BasicUserDaoImp")
public void setBudi(BasicUserDaoImp budi) {
this.budi = budi;
}
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 getBranchbankname() {
return branchbankname;
}
public void setBranchbankname(String branchbankname) {
this.branchbankname = branchbankname;
} public String execute(){
System.out.println(branchbankname+":"+username+":"+password);
try{
BasicUser bu = new BasicUser();
bu.setBranchBankName(branchbankname);
bu.setUsername(username);
bu.setPassword(MD5.encrypeMd5(password));
budi.addNewBasicUser(bu);
} catch(Exception e){
e.printStackTrace();
return "input";
}
return "success";
}
}这是相关的struts配置<package name="rootuser" namespace="/rootuser" extends="struts-default">
     <interceptors>
     <interceptor name="rootUserTypeCheck" class="com.xu.interceptors.RootUserCheck"/>
     <interceptor-stack name="rootUserCheck">
     <interceptor-ref name="rootUserTypeCheck"/>
     <interceptor-ref name="defaultStack"/>
     </interceptor-stack>
    </interceptors>
     
    <global-results>
    <result name="input">/RootLogin/rootlogin.jsp</result>
    </global-results>
    <action name="login" class="com.actions.RootLogin">  
     <result name="success">/WEB-INF/jsps/RootUser/desktop.jsp</result>
    </action>
    <action name="addNewBasicUser">
     <interceptor-ref name="rootUserTypeCheck"/>
     <result>/WEB-INF/jsps/RootUser/addNewBasicUser.jsp</result>
    </action>
    <action name="addOneNewBranch" class="com.actions.AddNewBranchBank">
     <interceptor-ref name="rootUserTypeCheck"/>
     <result name="success">/WEB-INF/jsps/RootUser/desktop.jsp</result>
    </action>
    </package>
现在的问题是我的action类中的execute方法执行后后台system.out.println打印出来的全部是null而且报空指针错。
现在请各位高手们帮我看看,我这到底是什么地方出问题了。

解决方案 »

  1.   

    AddNewBranchBank 
    这个类要继承 struts的ActionSupport
      

  2.   

    没有继承ActionSupport
       所以它无法接收你传过来的参数
      

  3.   

    楼主将<interceptor-ref name="rootUserTypeCheck"/>,<interceptor-ref name="defaultStack"/>换下顺序先
    <interceptor-ref name="defaultStack"/>在<interceptor-ref name="rootUserTypeCheck"/>
      

  4.   

    1,2楼的同学,讲错了吧,strust2和stust1比一大区别就是不用任何继承也能达到取值效果,只需提供execute方法,建议去试试在说
      

  5.   

    我用的是struts2 你说的这个方法不行啊!
      

  6.   

    会被<interceptor-ref name="rootUserTypeCheck"/>拦截器拦截
      

  7.   

    <action name="addOneNewBranch" class="com.actions.AddNewBranchBank">
            <interceptor-ref name="rootUserTypeCheck"/>
            <result name="success">/WEB-INF/jsps/RootUser/desktop.jsp</result>
        </action>
     红色部分应为  rootUserCheck
      

  8.   

    那10楼的就去看看传智播客或者马士兵的视频,看看是不是非得继承actionSupport,不继承actionSupport不是不就没用了
      

  9.   

    一个普通的JAVA类,不继承ActionSupport,的确可以执行execute()方法,但是,到底能不能接受参数我没试过,不敢下定论,
    但是我给楼主个建议,目前常用的两种接受数据的方式(Action属性、DomainModel)都是 extens ActionSupport 你先把正常渠道走通了  然后再回头测试 普通JAVA类属性到底能否接受struts2的数据
      

  10.   

    拦截器应用错了<action name="addOneNewBranch" class="com.actions.AddNewBranchBank">
            <interceptor-ref name="rootUserCheck"/><!--y引用拦截器栈,不是拦截器-->
            <result name="success">/WEB-INF/jsps/RootUser/desktop.jsp</result>
        </action>
      

  11.   

    没有继承ActionSupport,所以它无法接收你传过来的参数