首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

struts2标签有关问题

2012-01-01 
struts2标签问题今天刚试了试struts2标签,仅仅是做了一个简单的登录验证,发现个问题,直接登录打不开页面,

struts2标签问题
今天刚试了试struts2标签,仅仅是做了一个简单的登录验证,发现个问题,直接登录打不开页面,只能通过一个Action才能打开页面。不太理解,希望有人给解释下。 谢谢

[解决办法]
你说的不详细,如果你是想一进去就进行验证,那么,你可以在jsp页面触发onload事件。

如果不是这样,那就是你说的,不能直接访问一个页面,那就可在jsp页面写一段java脚本让他自动跳转:

Java code
<%        request.getRequestDispatcher(            "WEB-INF/login/login.jsp").forward(request,                response);%>
[解决办法]
莫非这位仁兄的意思是使用了STRUTS2的标签,但是直接用JSP跳了JSP页面而没有经过ACTION?没有经过ACTION的拦截器处理,是不可以直接用struts的标签得到数据的。
[解决办法]
可能和提交的action路径有关系,路径是必须正确滴,




/////////////////////////////////////////////////////////////////////
 jsp页面


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

 <body>
<s:actionerror/>
<s:form action="login">
<s:textfield name="lname" label="登录名"></s:textfield>
<s:password name="lpass" label="密码"></s:password>
<s:submit></s:submit>
</s:form>


</body>


//////////////////////////////////////////////////////////////////////////////
控制器::




import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.qulx.service.LoginService;

public class LoginAction extends ActionSupport {

//属性驱动
private String lname;
private String lpass;

public String getLname() {
return lname;
}
public void setLname(String lname) {
this.lname = lname;
}
public String getLpass() {
return lpass;
}
public void setLpass(String lpass) {
this.lpass = lpass;
}
@Override
public String execute() throws Exception {
//验证用户是否是合法用户 
boolean flag = new LoginService()
.loginValidate(this.lname,this.lpass);
if(flag){
//如果用户合法,将用户绑定到会话中
ActionContext.getContext().getSession().put("loginname", lname);
return this.SUCCESS;
}else{
//添加控制器级别的异常
this.addActionError("非法用户,请重新登录");
return this.INPUT;
}
}
/**
* 表单验证
* 用户名不能为空,密码长度不低于六位
*/
@Override
public void validate() {
if(null == this.lname || "".equals(this.lname)){
//添加字段级别的异常
this.addFieldError("lname", "用户名不能为空");
}
if(null == this.lpass || this.lpass.length()<6){

this.addFieldError("lpass", "密码长度不能低于6位");
}
}
}



///////////////////////////////////////////////////////////////////////
struts.xml配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="0331s2" extends="struts-default">

<!-- 注册拦截器 -->
<interceptors>
<!-- 注册登录拦截器 -->
<interceptor name="loginInterceptor" 
class="com.qulx.interceptor.LoginInterceptor"></interceptor>
<!-- 注册方法拦截器 -->
<interceptor name="methodInterceptor" 
class="com.qulx.interceptor.MyMethodInterceptor">
<!--includeMethods定义拦截的方法 -->
<param name="includeMethods">save,update</param>
<!--excludeMethods定义不拦截的方法 -->


<param name="excludeMethods">checkall,checkbyid</param>
</interceptor>
<!-- 定义拦截器栈 -->
<interceptor-stack name="qulxstack">
<interceptor-ref name="loginInterceptor"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
<interceptor-stack name="methodstack">
<interceptor-ref name="methodInterceptor"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>

</interceptors>
<!-- 设置自定义默认拦截器栈,系统默认的defaultStack失效 -->
<default-interceptor-ref name="methodstack"></default-interceptor-ref>

<!-- 设置全局结果类型 -->
<global-results>
<result name="login">/login.jsp</result>
</global-results>

<action name="login" class="com.qulx.action.LoginAction">
<result type="redirect">/main.jsp</result>
<result name="input">/login.jsp</result>

<interceptor-ref name="defaultStack"></interceptor-ref>
</action>

<action name="*user" method="{1}" class="com.qulx.action.UserAction">

<result name="saveok" type="redirect">/main.jsp</result>
<result name="savefail">/adduser.jsp</result>
<result name="checkbyid">/update.jsp</result>
<result name="checkall" type="redirect">/show.jsp</result>
<result name="updateok" type="redirectAction">/checkalluser.do</result>
<result name="updatefail">/update.jsp</result>
<result name="input">/adduser.jsp</result>

</action>



</package>
</struts>















有什么问题可以加我好友,呵呵。我给你我做的例子


[解决办法]
This is usually caused by using Struts tags without the associated filter. Struts tags are only usable when the request has passed through its servlet filter
Struts的标签必须经过servlet的过滤才能使用,说得很明白。
struts的实现是依赖于servlet拦截指定名称的请求再做自己的处理,不过我想struts的标签必须经过配置它的servlet来处理标签库的信息,没有经过struts的servlet来处理,就用不上他的标签库。我没用过Struts,只是说下我的想法。

热点排行