如何准备拦截器在struts2中工作?

时间:2012-05-28 14:08:19

标签: java struts2 validation

请告诉我准备拦截器是如何工作的 我现在正在使用它找到了暴力行为

prepare()
validate()
execute()

这些是方法

所以当我点击请求时,它会调用3次

prepare()
validate()
execute()
prepare()
validate()
execute()
prepare()
validate()
execute()

我不知道它的问题是什么 根据我的理解,它应该只运行准备方法&显示预先填充的数据表格&当用户点击提交时,它应该提交数据。

请解释

<action name="updatebusinessinfo" class="com.controller.UpdateBusinessDetails">

            <interceptor-ref name="params"/>
            <!--
            <interceptor-ref name="prepare"/> 

            <interceptor-ref name="basicStack"/>
            -->

            <interceptor-ref name="fileUpload">
                    <param name="maximumSize">2097152</param>
                    <param name="allowedTypes">image/png,image/gif,image/jpeg,image/pjpeg</param>
            </interceptor-ref>
            <interceptor-ref name="defaultStack"></interceptor-ref>
            <result name="success">businessinfo.jsp</result>
            <result name="input">businessinfo.jsp</result>
            <result name="error">businessinfo.jsp</result>
        </action>

是的朋友我在struts.xml文件中犯了错误。 现在请告诉我如何在prepare()方法中接收url参数? http://www.myweb.com/updatebusinessinfo/23

我试过以下但没有工作

<action name="updatebusinessinfo/*" class="com.controller.UpdateBusinessDetails">
<param name="id">{1}</param>

            <interceptor-ref name="params"/>
            <!--
            <interceptor-ref name="prepare"/> 

            <interceptor-ref name="basicStack"/>
            -->

            <interceptor-ref name="fileUpload">
                    <param name="maximumSize">2097152</param>
                    <param name="allowedTypes">image/png,image/gif,image/jpeg,image/pjpeg</param>
            </interceptor-ref>
            <interceptor-ref name="defaultStack"></interceptor-ref>
            <result name="success">businessinfo.jsp</result>
            <result name="input">businessinfo.jsp</result>
            <result name="error">businessinfo.jsp</result>
        </action>

2 个答案:

答案 0 :(得分:3)

关于这个问题的一些提示可能对寻找准备拦截器信息的人有用:

  • struts2中的DefaultStack已经包含了Prepare拦截器,所以如果你包含它们,你将有2次调用prepare()。通常你不希望这样。
  • 在DefaultStack中,在Params拦截器之前调用Prepare拦截器,因此在prepare()方法中不会有请求参数。如果您想在那里使用params(例如,从带有ID的DB中获取某些内容),您就无法做到。

在这里查看struts2中基本/默认堆栈的内容: http://struts.apache.org/release/2.0.x/docs/struts-defaultxml.html

有一个“paramsPrepareParamsStack”在准备之前和之后使用Params,所以你在para()中有你的参数。

答案 1 :(得分:1)

没有任何进一步的信息,很难说出这是什么以及为什么会发生这种情况。我们仍然希望你能提供更多关于你要做什么的细节?您正在访问的URL,有关配置的信息以及有关您的应用程序的任何其他信息。

如果你已经实现了Preparable接口,那么只会调用Prepare方法。简而言之,这是一种init方法,它允许我们在实际繁重的工作开始之前进行任何初始化工作。

在执行方法之前将调用Prepare方法。我建议您完成Prepare方法的工作以及堆栈调用它的实际方式。

以类似的方式,如果您已经实现了动作类,则S2将调用您的动作类的validate方法,并将根据方法中提供的实现验证数据。

这只是对流程的概述,我仍然建议您提供有关上下文的更多信息,以获得任何良好的输入。