【问题标题】:request parameters need to be populated with out validation in struts2需要在struts2中填充请求参数而不进行验证
【发布时间】:2012-10-24 02:43:55
【问题描述】:

我有一个带有方法 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”,还有其他方法吗?我想在不使用验证的情况下获取请求参数。

【问题讨论】:

    标签: java validation struts2 interceptor


    【解决方案1】:

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

    <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>
    

    【讨论】:

    • 非常感谢您的回答。
    【解决方案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 很快就会返回到您的操作中。

    您实际上想在这里实现什么目标?

    【讨论】:

    • 非常感谢您的回答..我实际上正在尝试将 Jquery 数据表与 struts2 操作集成。因此 jquery 将使用 ajax 调用直接通过 URL 发送请求...
    【解决方案3】:

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

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

    【讨论】:

    • 感谢您的回答..它对我帮助很大
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-10
    • 1970-01-01
    • 2018-09-24
    • 2020-04-30
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    相关资源
    最近更新 更多