base.HelloWorld.java
package base;
import com.opensymphony.xwork2.ActionSupport;
import java.lang.Exception;public class HelloWorld extends ActionSupport { 

public void validate(){
try{
if(getUsername().trim().equals("")||this.getUsername()==null){
System.out.println("validate");
this.addFieldError("username",getText("username"));
}
//if(getPassword()==null|| getPassword()=="")this.addFieldError("password",getText("password"));
}catch(Exception e){
e.printStackTrace();
}
}

public String execute(){
forwardMessage = "success";
return forwardMessage;
}

public String getPassword() {
return password; 
}
public void setPassword(String password) { 
this.password = password;

public String getUsername() { 
return username; 
}
public void setUsername(String username) { 
this.username = username; 
}

private String username;
private String password; 
private String forwardMessage;
}
interceptors.ExampleInterceptorpackage interceptors;import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;public class ExampleInterceptor implements Interceptor{ public void destroy() {
System.out.println("destroy");

} public void init() {
System.out.println("init");
} public String intercept(ActionInvocation invocate) throws Exception {
System.out.println("dobefore");
invocate.invoke();
System.out.println("doAfter");
return "success";
}

}
struts.xml<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>    <include file="struts-default.xml" />
    
    <package name="base" extends="struts-default">
     <interceptors>
     <interceptor name="Example" class="interceptors.ExampleInterceptor"></interceptor>
     </interceptors>
    
        <action name="HelloWorld" class="base.HelloWorld" >
            <result name="success">/HelloWorld.jsp</result>
            <result name="input">/index.jsp</result>
            <interceptor-ref name="Example"></interceptor-ref>
        </action>
    </package>
</struts>
index.jsp<%@ page language="java" contentType="text/html; charset=GBK"
    pageEncoding="GBK"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>say hello</title>
</head>
<body>
    <s:form action="HelloWorld" method="post">
    <table>
        Say Hello to :<s:textfield name="username" />
        <s:submit/>
        </table>
    </s:form>
</body>
</html>
Helloworld.jsp<%@ page language="java" contentType="text/html; charset=GBK"  pageEncoding="GBK"%>
 <%@ taglib prefix="s" uri="/struts-tags" %> 
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
 <html> <head>
  <meta http-equiv="Content-Type" content="text/html; charset=GBK">
   <title>Hello</title> </head>
    <body>  hello, <s:property value="username"/> 
    </body> </html>

解决方案 »

  1.   

    在Hellowolrd.jsp中显示不出来username的值
      

  2.   

      <action name="HelloWorld" class="base.HelloWorld" >
                <result name="success">/HelloWorld.jsp</result>
                <result name="input">/index.jsp</result>
                <interceptor-ref name="Example"></interceptor-ref>
                 <interceptor-ref name="defaultStack"></interceptor-ref>
            </action>
      

  3.   

    登陆页面怎么没有啊.你先在后台打印下username有没有取到值
      

  4.   

     <action name="HelloWorld" class="base.HelloWorld" >
                <result name="success">/HelloWorld.jsp</result>
                <result name="input">/index.jsp</result>
                <interceptor-ref name="Example"></interceptor-ref>   //注意这一行的作用
     </action>在struts 2中如果没有指定拦截器的话,参数传递是靠默认的拦截器完成的,即继承了"struts-default"包下定义的“param”拦截器。但是如果你在action元素中引用的一个自定义的拦截器的话,原来默认的拦截器栈就会不起作用。解决方法:个人建议你再定义一个拦截器栈,把"struts-default"包下默认的拦截器和自定义的拦截器都放到此拦截器栈中。在action中引用些拦截器栈就可以了。
      

  5.   

    Action中引用拦截器,必须手动加入默认拦截器。
      <action name="HelloWorld" class="base.HelloWorld" > 
                <result name="success">/HelloWorld.jsp </result> 
                <result name="input">/index.jsp </result> 
                <interceptor-ref name="Example"> </interceptor-ref> 
                <interceptor-ref name="defaultStack"> </interceptor-ref> 
            </action>
      

  6.   

    还有一种方法:
    在struts2.core...jar中打开默认配置文件:struts2-default.xml。里边根据不同的需要划分了不同的拦截器栈,即默认的拦截器序列。有一个叫做basicStack,里边含有传递参数的param拦截器。在你自己的应用里直接加上一句话就可以了:<default-interceptor-ref name = "basicStack"/>,他就自动的继承下来了
      

  7.   

    不好意思,刚才写错了,应该在你的action的配置中多加一条:<interceptor-ref name = "basicStack" />,这样才可以