2012-10-24 29 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如果這個答案幫助你然後接受它。 –