1

我有一个带有方法 searchUser() 的 struts Action 类,现在我想调用这个方法。所以我在 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”,还有其他方法吗?我想在不使用验证的情况下获取请求参数。

4

3 回答 3

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>
于 2012-10-24T05:52:23.907 回答
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 使用验证拦截器,并且只使用验证拦截器来执行此操作。因此,所有其他拦截器都将被忽略 - 包括负责将 HttpResponse 参数传递到您的操作中的参数拦截器。

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

你到底想在这里实现什么?

于 2012-10-24T08:25:59.137 回答
1

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

<action name="searchUser" method="searchUser" class="test.User"> 
  <interceptor-ref name="defaultStack">
    <param name="validation.excludeMethods">searchUser</param>
  </interceptor-ref>
  <result>...</result>
</action>
于 2012-10-24T04:09:53.537 回答