繁体   English   中英

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

[英]How prepare interceptor works in struts2?

请告诉我预备拦截器的工作原理,我现在正在使用它并发现了分段行为

prepare()
validate()
execute()

这些是方法

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

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

我不知道这是什么问题,根据我的理解,它应该只运行prepare方法并显示预填充的数据表格,并且当用户单击Submit时,它应该提交数据。

请解释

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

有关此问题的一些提示可能会在寻找有关“准备拦截器”信息的人们中派上用场:

  • struts2中的DefaultStack已经包含了Prepare拦截器,因此如果同时包含它们,则将有两个调用prepare()。 通常您不想要那样。
  • 在DefaultStack中,Prepare拦截器在Params拦截器之前被称为,因此prepare()方法中不会包含请求参数。 如果您想在其中使用参数进行操作(例如,从具有ID的DB中获取某些内容),则将无法执行。

查看此处以了解struts2中的基本/默认堆栈: http : //struts.apache.org/release/2.0.x/docs/struts-defaultxml.html

有一个“ paramsPrepareParamsStack”,它在Prepare之前和之后使用Params,因此您可以在prepare()中使用params。

好吧,没有任何进一步的信息,很难说出发生的原因和原因。我们仍然希望您能提供有关您要执行的操作的更多详细信息? 您要访问的URL,有关配置的信息以及有关您应用程序的其他信息。

仅当您实现了Preparable接口时才调用prepare方法。简而言之,它是一种init方法,它使我们可以在开始繁重的工作之前进行任何初始化工作。

准备方法将在执行方法之前调用。我建议您先了解准备方法的工作以及堆栈实际如何调用它。

以类似的方式,S2将调用您的操作类的validate方法(如果已实现),并将根据方法内部提供的实现来验证数据。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM