我有一个带有方法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”,还有其他方法。我希望使用验证来填充请求参数。
答案 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>