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
--------------------编程问答-------------------- 然后是struts2的配置文件
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;
}
}
--------------------编程问答-------------------- 这么花很难看,你可以设置一个断点在action的validate方法和execute方法的第一行,然后单步跟踪下去,你就会很清晰的看见为何返回input,
<!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>
如果没有进入相应方法,你就要考虑在拦截器设置断点了,
目测应该是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的方法 不进行表单验证就行 --------------------编程问答--------------------
把单引号删了 但还是那个问题 返回的依然是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 开发