需要在struts2中使用out验证填充请求参数

时间:2012-10-24 02:43:55

标签: java validation struts2 interceptor

我有一个带有方法searchUser()的struts Action Class现在我想调用这个方法。所以我在struts.xml中有以下配置

<action name="searchUser" method="searchUser" class="test.User">
<interceptor-ref name="validation">
    <param name="excludeMethods">searchUser</param>
</interceptor-ref>
<result name="success">/jsp/userAdded.jsp</result>
<result name="input">/jsp/user.jsp</result>
<result name="error">/jsp/error.jsp</result>
</action>

我的test.User.java类

public class UserAction extends ActionSupport{
  String loginId;
  //getter and setter method for loginId;

public String searchUser(){
   System.out.println(getLoginId());
   return SUCCESS;
}

}

现在,当我尝试使用URL访问此操作时:/ app / searchUser.action?loginId = 1然后根据我的理解控制台应该显示“1”但它为空。我想从URL访问操作而不是从struts表单访问。

如果我删除验证拦截器,那么我得到“1”。我想跳过验证,所以请帮助我如何在没有验证的情况下获得值“1”,还有其他方法。我希望使用验证来填充请求参数。

3 个答案:

答案 0 :(得分:2)

您也可以更改默认包的配置,而不是在操作中执行此操作:

<package name="default" extends="struts-default">
    <interceptors>
        <interceptor-stack name="defaultStack">
            <interceptor-ref name="exception" />
            <interceptor-ref name="alias" />
            <interceptor-ref name="servletConfig" />
            <interceptor-ref name="prepare" />
            <interceptor-ref name="i18n" />
            <interceptor-ref name="chain" />
            <interceptor-ref name="modelDriven" />
            <interceptor-ref name="fileUpload" />
            <interceptor-ref name="staticParams" />
            <interceptor-ref name="params" />
            <interceptor-ref name="conversionError" />
            <interceptor-ref name="validation">
                <param name="excludeMethods">searchUser</param>
            </interceptor-ref>
            <interceptor-ref name="workflow" />
        </interceptor-stack>
    </interceptors>
    ....
<package />

在那里,你可以配置很少的动作,你可以使用*符号。例如:

<param name="excludeMethods">search*, remove*</param>

答案 1 :(得分:2)

这与验证拦截器行为本身无关。通过

配置操作
<action name="searchUser" method="searchUser" class="test.User">
<interceptor-ref name="validation">
    <param name="excludeMethods">searchUser</param>
</interceptor-ref>
<result name="success">/jsp/userAdded.jsp</result>
<result name="input">/jsp/user.jsp</result>
<result name="error">/jsp/error.jsp</result>
</action>

你告诉struts使用Validation拦截器,并且只使用验证拦截器来执行此操作。因此忽略所有其他拦截器 - 包括负责将HttpResponse参数传递到您的操作中的Parameter拦截器。

当您从配置中删除验证拦截器时,Struts会使用默认堆栈 - 再次调用Parameter拦截器,并且您将HttpResponses返回到您的操作中。

你到底想要实现的目标是什么?

答案 2 :(得分:1)

默认拦截器可能会被覆盖。试试这个:

<action name="searchUser" method="searchUser" class="test.User"> 
  <interceptor-ref name="defaultStack">
    <param name="validation.excludeMethods">searchUser</param>
  </interceptor-ref>
  <result>...</result>
</action>