不好意思我知道这蛮基础的但是我真的记不起少什么了,麻烦各位帮忙看一下好么看没看出来都谢谢您,在百度谷歌上搜也没有我这样的错误.

VuVu512 2014-05-16 09:17:58
实在不好意思我实在找不到了,麻烦耽误您一点时间大致看一眼,看没看出来都谢谢您
先说问题,就是struts2数据校验 用注解配置的,配置之后输入错误的数据的话能够不走action的具体方法(个人感觉着应该就是拦截住了不合法的数据了吧)错误之后也能准确的跳转到指定的页面,但是在跳转到的页面写这是跳到的jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>

本系统出现了一个异常,请联系管理员
<hr><s:fielderror></s:fielderror>
<s:actionerror/>
<s:actionmessage/>
错误消息: ${msg}

跳到这里完全没有输出的呀,然后输入符合规则的数据能够正常访问方法
java类如下
package xxx.user.controller;

import java.io.IOException;
import java.io.PrintWriter;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.interceptor.annotations.InputConfig;
import com.opensymphony.xwork2.validator.annotations.FieldExpressionValidator;
import com.opensymphony.xwork2.validator.annotations.IntRangeFieldValidator;
import com.opensymphony.xwork2.validator.annotations.RegexFieldValidator;
import com.opensymphony.xwork2.validator.annotations.RequiredFieldValidator;
import com.opensymphony.xwork2.validator.annotations.RequiredStringValidator;
import com.opensymphony.xwork2.validator.annotations.Validations;
import com.opensymphony.xwork2.validator.annotations.ValidatorType;
import javax.servlet.http.HttpSession;
import javax.swing.Action;

import org.apache.struts2.interceptor.validation.SkipValidation;

import xxx.common.BaseAction;
import xxx.common.SendMail;
import xxx.user.pojo.Conuser;
import xxx.user.service.userService;

import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.validator.annotations.Validations;

@Validations(
requiredStrings={
@RequiredStringValidator(fieldName="conuser.userName",message="输入用户名吧", shortCircuit=true,trim=true,type=ValidatorType.FIELD),
@RequiredStringValidator(fieldName="conuser.userPwd",message="输入密码吧",shortCircuit=true,trim=true,type=ValidatorType.FIELD),
@RequiredStringValidator(fieldName="conuser.userEmail",message="输入Email吧",shortCircuit=true,trim=true,type=ValidatorType.FIELD),
}, requiredFields={@RequiredFieldValidator(fieldName="conuser.userPhone",message="输入电话吧",shortCircuit=true,type=ValidatorType.FIELD)},

regexFields={
@RegexFieldValidator(fieldName="conuser.getUserName",message="请正确输入合法用户名",expression="^\\s*[.A-Za-z0-9_-]{5,15}\\s*$"),
@RegexFieldValidator(fieldName="conuser.userPwd",message="请正确输入合法密码",expression="^\\s*[.A-Za-z0-9_-]{5,15}\\s*$"),
@RegexFieldValidator(fieldName="conuser.userPhone",message="请正确输入电话号码",expression="^1[3|4|5|8][0-9]\\d{8}$"),
@RegexFieldValidator(fieldName="conuser.userEmail",message="邮箱不合法",expression="^\\s*([A-Za-z0-9_-]+(\\.\\w+)*@(\\w+\\.)+\\w{2,3})\\s*$"),
}

)
public class userAction extends BaseAction implements ModelDriven<Conuser> {


private Conuser conuser = new Conuser();

private userService service;

public Conuser getConuser() {
return conuser;
}

public void setConuser(Conuser conuser) {
this.conuser = conuser;
}

public void setService(userService service) {
this.service = service;
}

public Conuser getModel() {

return conuser;
}

public userService getService() {
return service;
}
@SkipValidation
public String check() throws IOException {

// Serverlet根据请求的参数,验证完成后,以xml格式写下验证信息。
// 供JSP页面的XMLHttpRequest对象读取。
response.setContentType("text/xml");
response.setHeader("Cache-Control", "no-cache");

// 验证用户名
boolean ck = service.checkUserName(conuser);
// 根据返回的结果,写下相应的XML信息。
if (ck) {
response.getWriter().write("<message>1</message>"); // 用户名不存在

return null;

} else {
response.getWriter().write("<message>0</message>"); // 用户名存在

return null;

}
// return "check";
}
//插入用户...

public String addUser() throws IOException {
SendMail sm =new SendMail();
service.addUser(conuser);
sm.send(conuser);
return "add";

}
@SkipValidation
public String login() throws IOException {

response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
System.out.println(conuser.getUserName());

if (conuser.getUserLevel() != 0) {

HttpSession session = request.getSession();
session.setAttribute("userName", conuser.getUserName());
session.setAttribute("userLevel", conuser.getUserLevel());
return SUCCESS;
}
// 返回登陆标识
int flag = service.checkLogin(conuser);
if (flag == 0) {
// out.println("<script>alert('用户名或密码不正确!');history.back();</script>");
HttpSession session = request.getSession();
session.setAttribute("userName", conuser.getUserName());


session.setAttribute("userNO","<font color='red' size='2px'><b>用户名或密码不正确</b></font>");
return "no";
} else {
// 在session范围存储键值对
HttpSession session = request.getSession();
session.setAttribute("userName", conuser.getUserName());
session.setAttribute("userLevel", flag);
session.setAttribute("userNO","");
return SUCCESS;

}

}
}

然后表单界面如下
[code=jsp]<%@ taglib uri="/struts-tags" prefix="s"%>

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
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 'addUser.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">
-->
<!-- <script type="text/javascript" src="js/check.js" />
<script type="text/javascript" src="ja/jquery-1.7.2.js"></script>
-->

</head>
<!-- oncontextmenu="return false" ondragstart="return false"
onselectstart="return false" -->
<body onload="ms();">
<div>
<form action="<%=request.getContextPath()%>/user/addUser.action"
method="post" id="addUser" name="addUser" onkeydown="if(event.keyCode==13){return false;}">
<table width="600" border="0" align="center" cellpadding="0"
cellspacing="0">
<tr>
<td height="50" colspan="5" align="center" bgcolor="#CCCCCC">
<blockquote>
<blockquote>
<blockquote>
<p>
<strong>用户注册</strong>

</p>
</blockquote>
</blockquote>
</blockquote>
</td>
</tr>
<tr>
<td width="39" height="50" bgcolor="#E4E4E4"> 

</td>
<td width="175" height="50" align="right" bgcolor="#E4E4E4">
用 户 名:
</td>
<td height="50" colspan="2" bgcolor="#E4E4E4">
<input name="userName" type="text" id="userName" size="24"
maxlength="20" onBlur="checkUserNameAction();" >
</td>
<td height="50" bgcolor="#E4E4E4"> 
<span id="checkUserNameMsg"></span>
</td>
</tr>
<tr>
<td height="50" bgcolor="#E4E4E4"> 
<s:fielderror></s:fielderror>
<s:actionerror />
<s:actionmessage/>

</td>
<td height="50" align="right" bgcolor="#E4E4E4">
密 码:
</td>
<td height="50" colspan="2" bgcolor="#E4E4E4">
<input name="userPwd" type="text" id="userPwd" size="24"
maxlength="20" onBlur="checkUserPwd();">
</td>
<td height="50" bgcolor="#E4E4E4"> 
<span id="checkUserPwd"></span>
</td>
</tr>
<tr>
<td height="50" bgcolor="#E4E4E4"> 

</td>
<td height="50" align="right" bgcolor="#E4E4E4">
确认密码:
</td>
<td height="50" colspan="2" bgcolor="#E4E4E4">
<input name="userPwd1" type="text" id="userPwd1" size="24"
maxlength="20" onBlur="checkUserPwdAgin();">
</td>
<td height="50" bgcolor="#E4E4E4"> 
<span id="checkUserPwdAgin"></span>
</td>
</tr>
<tr>
<td height="50" bgcolor="#E4E4E4"> 

</td>
<td height="50" align="right" bgcolor="#E4E4E4">
电话号码:
</td>
<td height="50" colspan="2" bgcolor="#E4E4E4">
<input name="userPhone" type="text" id="userPhone" size="24"
maxlength="15" onBlur="checkUserPhone();">
</td>
<td height="50" bgcolor="#E4E4E4"> 
<span id="checkUserPhone"></span> <s:fielderror/>
</td>
</tr>
<tr>
<td height="50" bgcolor="#E4E4E4"> 

</td>
<td height="50" align="right" bgcolor="#E4E4E4">
邮箱:
</td>
<td height="50" colspan="2" bgcolor="#E4E4E4">
<input name="userEmail" type="text" id="userEmail" size="24px"
maxlength="30" onBlur="checkUserEmail();">
</td>
<td height="50" bgcolor="#E4E4E4"> 
<span id="checkUserEmail"></span>
</td>
</tr>
<tr>
<td height="50" bgcolor="#E4E4E4"> 

</td>
<td height="50" bgcolor="#E4E4E4">
<input type="hidden" name="userLevel" id="userLevel" value="2" />
</td>
<td width="41" height="50" bgcolor="#E4E4E4"> 

</td>
<td width="142" height="50" bgcolor="#E4E4E4">
<input type="submit" name="submit" id="submit"
onclick="return check();" value="提交">
</td>
<td height="50" bgcolor="#E4E4E4"> 
<span id="wait"></span>

</td>
</tr>
<tr>
<td height="50" bgcolor="#E4E4E4"> 

</td>
<td height="50" bgcolor="#E4E4E4"> 

</td>
<td height="50" colspan="2" bgcolor="#E4E4E4"> 

</td>
<td height="50" bgcolor="#E4E4E4"> 

</td>
</tr>
</table>
</form>
</div>
<br>
</body>

</html>
这个字数原因struts配置文件就1l再贴出来吧 劳驾了 谢谢
...全文
258 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
VuVu512 2014-05-16
  • 打赏
  • 举报
回复
引用 4 楼 fudongrifdr 的回复:
你import了一个javax.swing.Action?
之前调这个调那个,不知道什么时候添加上的,这个应该没影响吧现在已经删了啊
VuVu512 2014-05-16
  • 打赏
  • 举报
回复
引用 4 楼 fudongrifdr 的回复:
你import了一个javax.swing.Action?
没 有几条import 是没意义的 恰巧你说的这个貌似就是,这是我现在的import
import java.io.IOException;
import java.io.PrintWriter;
import com.opensymphony.xwork2.validator.annotations.RegexFieldValidator;  
import com.opensymphony.xwork2.validator.annotations.RequiredFieldValidator;
import com.opensymphony.xwork2.validator.annotations.RequiredStringValidator;  
import com.opensymphony.xwork2.validator.annotations.Validations;  
import com.opensymphony.xwork2.validator.annotations.ValidatorType;  
import javax.servlet.http.HttpSession;
import com.opensymphony.xwork2.ModelDriven;
import org.apache.struts2.interceptor.validation.SkipValidation;

import xxx.common.BaseAction;
import xxx.common.SendMail;
import xxx.user.pojo.Conuser;
import xxx.user.service.userService;


VuVu512 2014-05-16
  • 打赏
  • 举报
回复
引用 2 楼 huxiweng 的回复:
太多了。 你用<s:debug/>看下值栈里面有没有error的数据
这是我在拦截器中输出的信息 请求uri=/usercon/user/addUser.action 继续向下执行 请求uri=/usercon/error.jsp 继续向下执行 确实请求addUser.action了 但是不正确的表单数据提交后只能访问action而不能访问具体的action对应的方法,正确的表单数据就可以访问具体的action对应的方法
末日哥 2014-05-16
  • 打赏
  • 举报
回复
你import了一个javax.swing.Action?
VuVu512 2014-05-16
  • 打赏
  • 举报
回复
引用 2 楼 huxiweng 的回复:
太多了。 你用<s:debug/>看下值栈里面有没有error的数据
没搞懂到底什么状况,值栈里没有error的数据 这是为什么呢
teemai 2014-05-16
  • 打赏
  • 举报
回复
太多了。 你用<s:debug/>看下值栈里面有没有error的数据
VuVu512 2014-05-16
  • 打赏
  • 举报
回复
额 不哈意思 表单界面 没放进code标签这里重新贴一下
<%@ taglib uri="/struts-tags" prefix="s"%>

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
	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 'addUser.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">
	-->
	<!--  	<script type="text/javascript" src="js/check.js" />
		<script type="text/javascript" src="ja/jquery-1.7.2.js"></script>
-->

	</head>
	<!-- oncontextmenu="return false" ondragstart="return false"
		onselectstart="return false"  -->
	<body onload="ms();">
		<div>
			<form action="<%=request.getContextPath()%>/user/addUser.action"
				method="post" id="addUser" name="addUser" onkeydown="if(event.keyCode==13){return false;}">
				<table width="600" border="0" align="center" cellpadding="0"
					cellspacing="0">
					<tr>
						<td height="50" colspan="5" align="center" bgcolor="#CCCCCC">
							<blockquote>
								<blockquote>
									<blockquote>
										<p>
											<strong>用户注册</strong>
											
										</p>
									</blockquote>
								</blockquote>
							</blockquote>
						</td>
					</tr>
					<tr>
						<td width="39" height="50" bgcolor="#E4E4E4"> 
							
						</td>
						<td width="175" height="50" align="right" bgcolor="#E4E4E4">
							用 户 名:
						</td>
						<td height="50" colspan="2" bgcolor="#E4E4E4">
							<input name="userName" type="text" id="userName" size="24"
								maxlength="20" onBlur="checkUserNameAction();" >
						</td>
						<td height="50" bgcolor="#E4E4E4"> 
							<span id="checkUserNameMsg"></span>
						</td>
					</tr>
					<tr>
						<td height="50" bgcolor="#E4E4E4"> 
							<s:fielderror></s:fielderror>
							 <s:actionerror />
							 <s:actionmessage/>
							 
						</td>
						<td height="50" align="right" bgcolor="#E4E4E4">
							密 码:
						</td>
						<td height="50" colspan="2" bgcolor="#E4E4E4">
							<input name="userPwd" type="text" id="userPwd" size="24"
								maxlength="20" onBlur="checkUserPwd();">
						</td>
						<td height="50" bgcolor="#E4E4E4"> 
							<span id="checkUserPwd"></span>
						</td>
					</tr>
					<tr>
						<td height="50" bgcolor="#E4E4E4"> 
							
						</td>
						<td height="50" align="right" bgcolor="#E4E4E4">
							确认密码:
						</td>
						<td height="50" colspan="2" bgcolor="#E4E4E4">
							<input name="userPwd1" type="text" id="userPwd1" size="24"
								maxlength="20"  onBlur="checkUserPwdAgin();">
						</td>
						<td height="50" bgcolor="#E4E4E4"> 
						<span id="checkUserPwdAgin"></span>	
						</td>
					</tr>
					<tr>
						<td height="50" bgcolor="#E4E4E4"> 
							
						</td>
						<td height="50" align="right" bgcolor="#E4E4E4">
							电话号码:
						</td>
						<td height="50" colspan="2" bgcolor="#E4E4E4">
							<input name="userPhone" type="text" id="userPhone" size="24"
								maxlength="15"  onBlur="checkUserPhone();">
						</td>
						<td height="50" bgcolor="#E4E4E4"> 
							<span id="checkUserPhone"></span>	 <s:fielderror/>
						</td>
					</tr>
					<tr>
						<td height="50" bgcolor="#E4E4E4"> 
							
						</td>
						<td height="50" align="right" bgcolor="#E4E4E4">
							邮箱:
						</td>
						<td height="50" colspan="2" bgcolor="#E4E4E4">
							<input name="userEmail" type="text" id="userEmail" size="24px"
								maxlength="30"  onBlur="checkUserEmail();">
						</td>
						<td height="50" bgcolor="#E4E4E4"> 
							<span id="checkUserEmail"></span>	
						</td>
					</tr>
					<tr>
						<td height="50" bgcolor="#E4E4E4"> 
							
						</td>
						<td height="50" bgcolor="#E4E4E4">
							<input type="hidden" name="userLevel" id="userLevel" value="2" />
						</td>
						<td width="41" height="50" bgcolor="#E4E4E4"> 
							
						</td>
						<td width="142" height="50" bgcolor="#E4E4E4">
							<input type="submit" name="submit" id="submit"
								onclick="return check();" value="提交">
						</td>
						<td height="50" bgcolor="#E4E4E4"> 
							<span id="wait"></span> 
	
						</td>
					</tr>
					<tr>
						<td height="50" bgcolor="#E4E4E4"> 
							
						</td>
						<td height="50" bgcolor="#E4E4E4"> 
							
						</td>
						<td height="50" colspan="2" bgcolor="#E4E4E4"> 
							
						</td>
						<td height="50" bgcolor="#E4E4E4"> 
							
						</td>
					</tr>
				</table>
			</form>
		</div>
		<br>
	</body>

</html>
然后struts配置的两个文件如下
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
	<package name="user" namespace="/user" extends="struts-default">
	<global-results>
			<result name="input" type="redirect">/error.jsp</result>
	</global-results>
		<action name="login" class="userAction" method="login">
			<result name="success" type="redirect">/index.jsp</result>
			<result name="no" type="redirect">/login.jsp</result>
		</action>
		<action name="check" class="userAction" method="check">
			 <result name="check" type="redirect" >/addUser.jsp</result>
		</action>
		<action name="addUser" class="userAction" method="addUser">
			<result name="add" type="redirect">/login.jsp</result>
		</action>
		
	</package>
</struts>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>

	<!-- 常量配置 -->

	<!--指定默认编码集,作用于HttpServletRequest的setCharacterEncoding方法 -->
	<constant name="struts.i18n.encoding" value="UTF-8" />
	<!--开发模式下使用,这样可以打印出更详细的错误信息 -->
	<constant name="struts.devMode" value="true" />
	<!-- 该属性设置Struts 2是否支持动态方法调用,该属性的默认值是true。如果需要关闭动态方法调用,则可设置该属性为false。 -->
	<constant name="struts.enable.DynamicMethodInvocation" value="true" />
	<!--上传文件的大小限制 -->
	<constant name="struts.multipart.maxSize" value="20971520" />
	<!-- 资源文件路径 -->
	<constant name="struts.custom.i18n.resources" value="applicationResource" />
	<!--默认的视图主题-->
	<constant name="struts.ui.theme" value="simple" />
	<!-- 把Action的控制权交给spring-->
	<constant name="struts.objectFactory" value="spring" />
	
	<include file="struts-user.xml"/>
		  <package name="default" namespace="/" extends="struts-default">
        <global-results>
            <result name="exception-error">/error.jsp</result>
        </global-results>
        <global-exception-mappings>
            <exception-mapping result="exception-error" exception="java.lang.Exception"></exception-mapping>
        </global-exception-mappings>    
    </package>
	
</struts>    

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧