当前位置:编程学习 > JAVA >>

struts2总是返回input

最近做一个项目 注册的时候,点提交后返回的总是struts2配置文件中input的result页面。
代码如下

<%@page contentType="text/html" pageEncoding="UTF-8"%>

<%@taglib prefix="s" uri="/struts-tags" %>

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title><s:text name="个人信息管理系统->注册"/></title>
    </head>
    <body bgcolor="#CCCCFF">
        <s:form action="registerAction" method="post" >
            <table align="center">
                <tr>
                 
                    <td width="40%">
                        <table border="2" bgcolor="#AABBCCDD" width="100%" align="center">
                            <tr>
                                <td colspan="2" align="center">
                                    <font color="yellow"><s:text name="请填写以下注册信息"/></font>
                                </td>
                            </tr>
                            <tr>
                                <td>
                                    <s:textfield name="loginname" label="登录名"/>
                                </td>
                            </tr>
                            <tr>
                                <td>
                                    <s:password name="password1" label="密码" size="21"/>
                                </td>
                            </tr>
                            <tr>
                                <td>
                                    <s:password name="password2" label="再次输入密码" size="21"/>
                                </td>
                            </tr>
                            <tr>
                                <td>
                                    <s:textfield name="name" label="用户真是姓名"/>
                                </td>
                            </tr>
                            <tr>
                                <td>
                                    <s:text name="用户性别:"></s:text>
                                </td>
                                <td>
                                    <input type="radio"  name="sex" value="男" checked/>男
                                    <input type="radio"  name="sex" value="女"/>女
                                </td>
                            </tr>
                            <tr>
                                <td>
                                <s:textfield name="birth" label="出生日期"/>
                                </td>
                            </tr>
                            <tr>
                                <td>
                                    <s:textfield name="nation" label="用户民族"/>
                                </td>
                            </tr>
                            <tr>
                                <td>
                                    <s:select name="edu" label="用户学历" headerValue="----------请选择----------" headerKey="1"
                                              list="{'硕士','博士','教授','本科','专科','高中','初中','小学','其它'}">    
                                    </s:select>
                                </td>
                            </tr>
                            <tr>
                                <td>
                                    <s:select name="work" label="用户职称" headerValue="----------请选择----------" headerKey="1"
                                              list="{'软件测试工程师','软件开发工程师','教师','学生','职员','经理','老板','公务员','其它'}">    
                                    </s:select>
                                </td>
                            </tr>
                            <tr>
                                <td>
                                    <s:textfield name="phone" label="用户电话"/>
                                </td>
                            </tr>
                            <tr>
                                <td>
                                    <s:textfield name="place" label="用户住址"/>
                                </td>
                            </tr>
                            <tr>
                                <td>
                                    <s:textfield name="email" label="用户邮箱"/>
                                </td>
                            </tr>
                            <tr>
                                <td colspan="2" align="center">
                                    <input type="submit" value="确定"/>
                                          
                                    <input type="reset" value="清空"/>
                                          
                                    <s:a href="http://localhost:8084/ch04/login/index.jsp">返回</s:a>
                                </td>
                            </tr>
                        </table>
                    </td>
                  
                </tr>
            </table>
        </s:form>
    </body>
</html>




Struts 工程师 label --------------------编程问答-------------------- 下面是对应的ACTION

package edu.login.Action;

import DBJavaBean.DB;
import com.opensymphony.xwork2.ActionSupport;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.servlet.http.HttpServletRequest;
import javax.swing.JOptionPane;
import org.apache.struts2.interceptor.ServletRequestAware;

public class RegisterAction extends ActionSupport implements ServletRequestAware{
    private String userName;
    private String password1;
    private String password2;
    private String name;
    private String sex;
    private String birth;
    private String nation;
    private String edu;
    private String work;
    private String phone;
    private String place;
    private String email;
    private ResultSet rs=null;
    private String message="ERROR";
    private HttpServletRequest request;
   public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getPassword1() {
        return password1;
    }
    public void setPassword1(String password1) {
        this.password1 = password1;
    }
    public String getPassword2() {
        return password2;
    }
    public void setPassword2(String password2) {
        this.password2 = password2;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public String getBirth() {
        return birth;
    }
    public void setBirth(String birth) {
        this.birth = birth;
    }
    public String getNation() {
        return nation;
    }
    public void setNation(String nation) {
        this.nation = nation;
    }
    public String getEdu() {
        return edu;
    }
    public void setEdu(String edu) {
        this.edu = edu;
    }
    public String getWork() {
        return work;
    }
    public void setWork(String work) {
        this.work = work;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public String getPlace() {
        return place;
    }
    public void setPlace(String place) {
        this.place = place;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public void setServletRequest(HttpServletRequest hsr) {
        request=hsr;
    }

  public void message(String msg){
       int type=JOptionPane.YES_NO_OPTION;
      String title="信息提示";
     JOptionPane.showMessageDialog(null,msg,title,type);
  }
    @Override
    public void validate(){
        if(getUserName()==null||getUserName().length()==0){
            addFieldError("userName","登录名字不允许为空!");
        }else{
            try {
                DB mysql=new DB();
                rs=mysql.selectMess(request, this.getUserName());
                if(rs.next()){
                    addFieldError("userName","此登录名字已存在!");
                }
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
        }
        if(getPassword1()==null||getPassword1().length()==0){
            addFieldError("password1","登录密码不允许为空!");
        }
        if(getPassword2()==null||getPassword2().length()==0){
            addFieldError("password2","重复密码不允许为空!");
        }
        if(!(getPassword1().equals(getPassword2()))){
            addFieldError("password2","两次密码不一致!");
        }
        if(getName()==null||getName().length()==0){
            addFieldError("name","用户姓名不允许为空!");
        }
        if(getBirth()==null||getBirth().length()==0||getBirth().equals("yyyy-mm-dd")){
            addFieldError("birth","用户生日不允许为空!");
        }else{
            if(getBirth().length()!=10){
                addFieldError("birth","用户生日格式为'yyyy-mm-dd'!");
            }else{
                String an=this.getBirth().substring(4, 5);
                String bn=this.getBirth().substring(7, 8);
                if(!(an.equals("-"))||!(bn.equals("-"))){
                    addFieldError("birth","用户生日格式为'yyyy-mm-dd'!");
                }
            }
        }
        if(getNation()==null||getNation().length()==0){
            addFieldError("nation","用户民族不允许为空!");
        }
        if(getEdu().equals("1")){
            addFieldError("edu","请选择用户学历!");
        }
        if(getWork().equals("1")){
            addFieldError("work","请选择用户工作!");
        }
        if(getPhone()==null||getPhone().length()==0){
            addFieldError("phone","用户电话不允许为空!");
        }
        if(getPlace()==null||getPlace().length()==0){
            addFieldError("place","用户地址不允许为空!");
        }
        if(getEmail()==null||getEmail().length()==0){
            addFieldError("email","用户email不允许为空!");
        }
    }
    public String execute() throws Exception{
        DB mysql=new DB();
        String mess=mysql.insertMess(request, this.getUserName(), this.getPassword1(), this.getName(), this.getSex(), this.getBirth(), this.getNation(), this.getEdu(), this.getWork(), this.getPhone(), this.getPlace(), this.getEmail());
        if(mess.equals("ok")){
            message="SUCCESS";
        }else if(mess.equals("one")){
            message="input";
        }
        return message;
    }
}


--------------------编程问答-------------------- 然后是最后一个ACTION 



package DBJavaBean;

import JavaBean.UserNameBean;
import JavaBean.MyDayBean;
import JavaBean.MyFileBean;
import JavaBean.MyFriBean;
import JavaBean.MyMessBean;
import java.sql.*;
import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.swing.JOptionPane;
import org.apache.struts2.interceptor.ServletRequestAware;

//实现ServletRequestAware 通过IoC方式直接访问Servlet,并通过 request获取 session对象
public class DB implements ServletRequestAware{
    private String driverName="com.mysql.jdbc.Driver";
    private String url="jdbc:mysql://localhost:3306/gbk?useUnicode=true&characterEncoding=gbk";
    private String user="root";
    private String password="root";
    private Connection con=null;
    private Statement st=null;
    private ResultSet rs=null;
    private HttpServletRequest request ;
    public DB(){
    }
   public String getDriverName() {
        return driverName;
    }
    public void setDriverName(String driverName) {
        this.driverName = driverName;
    }
    public String getUrl() {
        return url;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    public String getUser() {
        return user;
    }
    public void setUser(String user) {
        this.user = user;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public void setServletRequest(HttpServletRequest hsr) {
        request=hsr;
    }
    //完成连接数据库操作,并生成容器返回
    public Statement getStatement(){
        try{
            Class.forName(getDriverName());
            con=DriverManager.getConnection(getUrl(), getUser(), getPassword());
            return con.createStatement();
        }catch(Exception e){
            e.printStackTrace();
            return null;
        }
    }
   //完成注册,把用户的注册信息录入到数据库中
  public String insertMess(HttpServletRequest request,String userName,String password,String name,String sex,String birth,String nation,String edu,String work,String phone,String place,String email){
        try{
            String sure=null;
            rs=selectMess(request,userName);
            //判断是否用户名已存在,如果存在返回one
            if(rs.next()){
               sure="one";
                
                 
            }else{
                String sql="insert into user"+"(userName,password,name,sex,birth,nation,edu,work,phone,place,email)"+"values("+"'"+userName+"'"+","+"'"+password+"'"+","+"'"+name+"'"+","+"'"+sex+"'"+","+"'"+birth+"'"+","+"'"+nation+"'"+","+"'"+edu+"'"+","+"'"+work+"'"+","+"'"+phone+"'"+","+"'"+place+"'"+","+"'"+email+"'"+")";
                st=getStatement();
                int row=st.executeUpdate(sql);
                if(row==1){
                    //调用,myMessage方法,更新session中保存的用户信息
                    String mess=myMessage(request,userName);
                    if(mess.equals("ok")){
                        sure="ok";
                    }else{
                        sure=null;
                    }
                }else{
                    sure=null;
                }
                
            }
            return sure;
        }catch(Exception e){
            e.printStackTrace();
            return null;
        }
    }
    //更新注册的个人信息
    public String updateMess(HttpServletRequest request,String userName,String name,String sex,String birth,String nation,String edu,String work,String phone,String place,String email){
        try{
            String sure=null;
            String sql="update user set name='"+name+"',sex='"+sex+"',birth='"+birth+"',nation='"+nation+"',edu='"+edu+"',work='"+work+"',phone='"+phone+"',place='"+place+"',email='"+email+"' where userName='"+userName+"'";
            st=getStatement();
            int row=st.executeUpdate(sql);
            if(row==1){
                //调用,myMessage方法,更新session中保存的用户信息
                String mess=myMessage(request,userName);
                if(mess.equals("ok")){
                    sure="ok";
                }else{
                    sure=null;
                }
            }else{
                sure=null;
            }
            return sure;
        }catch(Exception e){
            e.printStackTrace();
            return null;
        }
    }
    //查询个人信息,并返回 rs
    public ResultSet selectMess(HttpServletRequest request,String userName){
        try{
            String sql="select * from user where userName='"+userName+"'";
            st=getStatement();
            return st.executeQuery(sql);
        }catch(Exception e){
            e.printStackTrace();
            return null;
        }
    }
    //把个人信息通过MyMessBean,保存到session对象中
    public String myMessage(HttpServletRequest request,String userName){
        try{
            ArrayList listName=null;
            HttpSession session=request.getSession();
            listName=new ArrayList();
            rs=selectMess(request,userName);
            while(rs.next()){
                MyMessBean mess=new MyMessBean();
                mess.setName(rs.getString("name"));
                mess.setSex(rs.getString("sex"));
                mess.setBirth(rs.getString("birth"));
                mess.setNation(rs.getString("nation"));
                mess.setEdu(rs.getString("edu"));
                mess.setWork(rs.getString("work"));
                mess.setPhone(rs.getString("phone"));
                mess.setPlace(rs.getString("place"));
                mess.setEmail(rs.getString("email"));
                listName.add(mess);
                session.setAttribute("MyMess", listName);
            }
            return "ok";
        }catch(Exception e){
            e.printStackTrace();
            return null;
        }
    }
    
--------------------编程问答-------------------- 然后是struts2的配置文件 

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    <include file="example.xml"/>
    <!-- Configuration for the default package. -->
    <package name="default" extends="struts-default">
        <action name="loginAction" class="edu.login.Action.LoginAction">
            <result name="SUCCESS">/mainFrame/main.jsp</result>
            <result name="input">/login/index.jsp</result>
            <result name="ERROR">/login/index.jsp</result>
        </action>
        <action name="registerAction"  class="edu.login.Action.RegisterAction">
            <result name="SUCCESS">/login/index.jsp</result>
            <result name="input">/login/register.jsp</result>
            <result name="ERROR">/login/register.jsp</result>
        </action>
        <action name="upMessAction" class="edu.personManager.Action.UpdateMessAction">
            <result name="SUCCESS">/personMessage/lookMessage.jsp</result>
            <result name="input">/personMessage/updateMessage.jsp</result>
            <result name="ERROR">/personMessage/updateMessage.jsp</result>
        </action>
        <action name="upPassAction" class="edu.personManager.Action.UpdatePassAction">
            <result name="SUCCESS">/personMessage/lookMessage.jsp</result>
            <result name="input">/personMessage/updatePass.jsp</result>
        </action>
        <action name="addFriAction" class="edu.friendManager.Action.AddFriAction">
            <result name="SUCCESS">/friendManager/lookFriends.jsp</result>
            <result name="input">/friendManager/addFriend.jsp</result>
        </action>
        <action name="findFriAction" class="edu.friendManager.Action.FindFriAction">
            <result name="SUCCESS">/friendManager/findFriend.jsp</result>
            <result name="ERROR">/friendManager/lookFriends.jsp</result>
            <result name="input">/friendManager/lookFriends.jsp</result>
        </action>
        <action name="upFriAction" class="edu.friendManager.Action.UpdateFriAction">
            <result name="SUCCESS">/friendManager/lookFriends.jsp</result>
            <result name="input">/friendManager/updateFriend.jsp</result>
        </action>
        <action name="deleteFriAction" class="edu.friendManager.Action.DeleteFriAction">
            <result name="SUCCESS">/friendManager/lookFriends.jsp</result>
        </action>
        <action name="addDayAction" class="edu.dateTimeManager.Action.AddDayAction">
            <result name="SUCCESS">/dateTimeManager/lookDay.jsp</result>
            <result name="input">/dateTimeManager/addDay.jsp</result>
            <result name="ERROR">/dateTimeManager/addDay.jsp</result>
        </action>
        <action name="findDayAction" class="edu.dateTimeManager.Action.FindDayAction">
            <result name="SUCCESS">/dateTimeManager/findDay.jsp</result>
            <result name="input">/dateTimeManager/lookDay.jsp</result>
            <result name="ERROR">/dateTimeManager/lookDay.jsp</result>
        </action>
        <action name="upDayAction" class="edu.dateTimeManager.Action.UpdateDayAction">
            <result name="SUCCESS">/dateTimeManager/lookDay.jsp</result>
            <result name="input">/dateTimeManager/updateDay.jsp</result>
            <result name="ERROR">/dateTimeManager/updateDay.jsp</result>
        </action>
        <action name="deleteDayAction" class="edu.dateTimeManager.Action.DeleteDayAction">
            <result name="SUCCESS">/dateTimeManager/lookDay.jsp</result>
        </action>
        <action name="addFileAction" class="edu.fileManager.Action.AddFileAction">
            <interceptor-ref name="fileUpload">
                <param name="maximumSize">1024000000</param>   
            </interceptor-ref>
            <interceptor-ref name="defaultStack"/>
                <param name="savePath">/save</param>
            <result name="SUCCESS">/fileManager/success.jsp</result>
            <result name="input">/fileManager/fileUp.jsp</result>
            <result name="ERROR">/fileManager/fileUp.jsp</result>
        </action>
        <action name="findFileAction" class="edu.fileManager.Action.FindFileAction">
            <result name="SUCCESS">/fileManager/findFile.jsp</result>
            <result name="input">/fileManager/lookFile.jsp</result>
            <result name="ERROR">/fileManager/lookFile.jsp</result>
        </action>
        <action name="deleteFileAction" class="edu.fileManager.Action.DeleteFileAction">
            <result name="SUCCESS">/fileManager/lookFile.jsp</result>
            <result name="ERROR">/fileManager/findFile.jsp</result>
        </action>
        <action name="downFileAction" class="edu.fileManager.Action.DownFileAction">
            <param name="path">/save/${downloadFileName}</param>
            <result name="SUCCESS" type="stream">
                <param name="contentType">application/octet-stream;charset=ISO8859-1</param>
                <param name="inputName">InputStream</param>
                <param name="contentDisposition">attachment;filename="${downloadFileName}"</param>
                <param name="bufferSize">40960</param>
            </result>
        </action>
    </package>
</struts>

--------------------编程问答-------------------- 这么花很难看,你可以设置一个断点在action的validate方法和execute方法的第一行,然后单步跟踪下去,你就会很清晰的看见为何返回input,

如果没有进入相应方法,你就要考虑在拦截器设置断点了,

目测应该是mysql.insertMess方法失败了,你可以单步跟踪进入这个方法, --------------------编程问答-------------------- 必须错,String sql="insert into user"+"(userName,password,name,sex,birth,nation,edu,work,phone,place,email)"+"values("+"'"+userName+"'"+","+"'"+password+"'"+","+"'"+name+"'"+","+"'"+sex+"'"+","+"'"+birth+"'"+","+"'"+nation+"'"+","+"'"+edu+"'"+","+"'"+work+"'"+","+"'"+phone+"'"+","+"'"+place+"'"+","+"'"+email+"'"+")";
这句sql语句肯定有问题。看了下,每个参数都多一对单引号。 --------------------编程问答-------------------- 写sql语句要这么写吗,出个错,位置都找不到 --------------------编程问答-------------------- 自己单步调试一下吧,看看代码是如何运行的? --------------------编程问答-------------------- 你的request用对了吗 --------------------编程问答-------------------- 如果你没定义input 却爆了带input的异常
可能是表单验证的问题 你注解掉action的方法 不进行表单验证就行 --------------------编程问答--------------------
引用 5 楼 fangmingshijie 的回复:
必须错,String sql="insert into user"+"(userName,password,name,sex,birth,nation,edu,work,phone,place,email)"+"values("+"'"+userName+"'"+","+"'"+password+"'"+","+"'"+name+"'"+","+"'"+sex+"'"+","+"'"+birth+"'"+","+"'"+nation+"'"+","+"'"+edu+"'"+","+"'"+work+"'"+","+"'"+phone+"'"+","+"'"+place+"'"+","+"'"+email+"'"+")";
这句sql语句肯定有问题。看了下,每个参数都多一对单引号。

把单引号删了 但还是那个问题 返回的依然是input。  我是新手 多谢帮助。 --------------------编程问答-------------------- 看了头晕 总结:稀烂 --------------------编程问答-------------------- 回复于: 2013-05-22 11:01:43
如果你没定义input 却爆了带input的异常
可能是表单验证的问题 你注解掉action的方法 不进行表单验证就行 --------------------编程问答-------------------- 你可以通过输出语句去查看下,执行到哪里给返回了。或者用debug,打上单点去进行调试。最好还是用debug去调试下吧!看看是那块的问题。 --------------------编程问答-------------------- 这是你Action中的方法中的问题。 --------------------编程问答-------------------- 做个注册 登录 有那么困难啊?好好学习ssh吧 --------------------编程问答-------------------- 哎哟。。你第二次注册的时候查询肯定有了。。当然返回input页面。

            //判断是否用户名已存在,如果存在返回one
            if(rs.next()){
               sure="one";
                 
                  
            } --------------------编程问答--------------------

你注册页面 登录名 name=“loginname”  数据处理页面又定义userName 明显不匹配 把register.jsp登录名 name="userName"  就ok了 
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,