2012-10-24 43 views
1

我有一个带方法searchUser()的struts Action Class,现在我想调用这个方法。 /应用/ searchUser:所以我必须在struts.xml中请求参数需要在struts2中进行验证填充

<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来访问这个动作如下配置.action?loginId = 1然后根据我的理解控制台应该显示“1”,但它是空的。我想从URL而不是struts形式访问动作。

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

回答

1

默认拦截器meybe被盗用。试试这个:

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

感谢您的回答..帮助我很多 – Pradeep

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

非常感谢您的回答。 – Pradeep

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> 

配置你的动作,你已经告诉支柱使用验证拦截,只有验证拦截此动作。因此,所有其他拦截器都将被忽略 - 包括负责将HttpResponse参数传递到您的动作中的Parameter拦截器。

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

你究竟想在这里实现什么?

+0

同意。迄今为止的最佳答案。 –

+0

非常感谢您的答案..我实际上正在尝试将jquery数据表与struts2操作集成在一起。所以jquery将发送请求直接与URL使用Ajax调用... – Pradeep

+0

@Pradeep如果这个答案帮助你然后接受它。 –

相关问题