Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何以编程方式设置要执行的下一个操作的FormBean?_Java_Struts_Struts 1_Actionform - Fatal编程技术网

Java 如何以编程方式设置要执行的下一个操作的FormBean?

Java 如何以编程方式设置要执行的下一个操作的FormBean?,java,struts,struts-1,actionform,Java,Struts,Struts 1,Actionform,我希望将一个操作转发到下一个配置的操作,但在此之前创建一个新的ActionForm实例并将其与转发的操作关联: Psuedo代码如下: public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { ActionForward forwardPage = map

我希望将一个操作转发到下一个配置的操作,但在此之前创建一个新的ActionForm实例并将其与转发的操作关联:

Psuedo代码如下:

public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {

    ActionForward forwardPage = mapping.findForward("success");


    // Some Code....
    ....
    ....

    // finally
    MyActionForm form = new MyActionForm();

    form.setSomeProp(...);
    form.setAnotherProp(...);

    forwardPage.doSomeMagicAndAssociateWith(form);

    return forwardPage;

}
抱歉,如果这是一个愚蠢的问题,我对这一切都是新手,一直无法找到答案

谢谢

编辑1:

只是想澄清一下:在我现在必须添加的新功能之前,就已经存在“成功”的ActionForwarded

我只希望在某些流中,在初始流(这里称为“success”)之前进行一些计算,然后在成功的情况下[:-)]将流转发到“success”操作


希望我的观点现在更清楚。

在操作中,可以更改传入参数的ActionForm字段值,但不能创建新的ActionForm并将其与下一个JSP页面关联

如果要在调用转发页面时重置表单中的所有数据,可以执行“form.reset();”或“form.clear();”之类的操作,在表单类中创建此方法


如果在成功页面中需要表单中没有的字段,可以使用“请求”对象存储这些字段。

在操作中,可以更改传入参数的ActionForm的字段值,但不能创建新的ActionForm并将其与下一个JSP页面相关联

如果要在调用转发页面时重置表单中的所有数据,可以执行“form.reset();”或“form.clear();”之类的操作,在表单类中创建此方法


如果您需要成功页面中不在表单中的字段,可以使用“请求”对象存储这些字段。

假设在struts配置中进行如下简单配置:

<action path="/action1"
  type="...."
  name="form1"
  scope="...">
    <forward name="success" path="/action2.do"/>
</action>

<action path="/action2"
  type="...."
  name="form2"
  scope="...">
        ...
</action>
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {

    ActionForward forwardPage = mapping.findForward("success");

    // do some coding

    FirstForm firstForm = new FirstForm();
    firstForm.setX(...);
    firstForm.setY(...);
    request.setAttribute("FirstForm", firstForm);

    return forwardPage;
}
然后,您需要的是在进行转发之前,将手放在
form2
上并用数据填充它

您当然可以这样做,因为每个表单(无论是
form1
还是
form2
)都用指定的名称绑定到指定的范围内,但这会干扰Struts的正常流程,这是一种不好的做法(您必须在介入并窃取节目之前真正了解Struts的工作原理)。这就是为什么我不会告诉你怎么做

我建议您做的是尽可能地解耦这两个动作。每个操作都会完成它的任务,没有任何操作将依赖于另一个操作预先填充的数据

要做到这一点,请在第二个操作中移动“魔法”代码,并在到达后执行操作。如果您只需要执行操作2中的操作(如果您来自操作1),则可以向配置添加一个标志:

<forward name="success" path="/action2.do?theFlag"/>

如果是这样,为什么需要创建新的ActionForm实例并将其与转发的操作关联?

假设在struts配置中进行如下简单配置:

<action path="/action1"
  type="...."
  name="form1"
  scope="...">
    <forward name="success" path="/action2.do"/>
</action>

<action path="/action2"
  type="...."
  name="form2"
  scope="...">
        ...
</action>
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {

    ActionForward forwardPage = mapping.findForward("success");

    // do some coding

    FirstForm firstForm = new FirstForm();
    firstForm.setX(...);
    firstForm.setY(...);
    request.setAttribute("FirstForm", firstForm);

    return forwardPage;
}
然后,您需要的是在进行转发之前,将手放在
form2
上并用数据填充它

您当然可以这样做,因为每个表单(无论是
form1
还是
form2
)都用指定的名称绑定到指定的范围内,但这会干扰Struts的正常流程,这是一种不好的做法(您必须在介入并窃取节目之前真正了解Struts的工作原理)。这就是为什么我不会告诉你怎么做

我建议您做的是尽可能地解耦这两个动作。每个操作都会完成它的任务,没有任何操作将依赖于另一个操作预先填充的数据

要做到这一点,请在第二个操作中移动“魔法”代码,并在到达后执行操作。如果您只需要执行操作2中的操作(如果您来自操作1),则可以向配置添加一个标志:

<forward name="success" path="/action2.do?theFlag"/>

如果是这样,为什么您需要创建一个新的ActionForm实例并将其与转发的操作关联起来?

我自己管理。也许我的解决方案可以解释我不确定我在我的问题中能解释什么

假设这是我的struts-config.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
    <data-sources>
    </data-sources>
    <!-- ================== Form Beans ================ -->
    <form-beans>
        <form-bean name="FirstForm"
            type="com.blahblah.forms.FirstForm" />  
        <form-bean name="SecondForm"
            type="com.blahblah.forms.SecondForm" />

            <form-bean name="NewForm"
            type="com.blahblah.forms.NewForm" />
    </form-beans>   
    <!-- ================== Action Mapping Definitions ================ -->
    <action-mappings>       
        <action path="/pages/First" name="FirstForm"
            type="org.springframework.web.struts.DelegatingActionProxy" scope="request">
            <forward name="success" path="/pages/Second.do" />
        </action>
        <action path="/pages/Second" name="SecondForm"
            type="org.springframework.web.struts.DelegatingActionProxy" scope="request">
            <forward name="doSomthing" path="/pages/DoSomthing.jsp" />
        </action>

        <action path="/pages/New" name="NewForm"
            type="org.springframework.web.struts.DelegatingActionProxy" scope="request">
            <forward name="success" path="/pages/First.do" />
        </action>
    </action-mappings>
</struts-config>

我自己管理。也许我的解决方案可以解释我不确定我在我的问题中能解释什么

假设这是我的struts-config.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
    <data-sources>
    </data-sources>
    <!-- ================== Form Beans ================ -->
    <form-beans>
        <form-bean name="FirstForm"
            type="com.blahblah.forms.FirstForm" />  
        <form-bean name="SecondForm"
            type="com.blahblah.forms.SecondForm" />

            <form-bean name="NewForm"
            type="com.blahblah.forms.NewForm" />
    </form-beans>   
    <!-- ================== Action Mapping Definitions ================ -->
    <action-mappings>       
        <action path="/pages/First" name="FirstForm"
            type="org.springframework.web.struts.DelegatingActionProxy" scope="request">
            <forward name="success" path="/pages/Second.do" />
        </action>
        <action path="/pages/Second" name="SecondForm"
            type="org.springframework.web.struts.DelegatingActionProxy" scope="request">
            <forward name="doSomthing" path="/pages/DoSomthing.jsp" />
        </action>

        <action path="/pages/New" name="NewForm"
            type="org.springframework.web.struts.DelegatingActionProxy" scope="request">
            <forward name="success" path="/pages/First.do" />
        </action>
    </action-mappings>
</struts-config>

我不是说要抢节目。请看一下我添加到问题中的新编辑。也许这对我们双方都有帮助。同样感谢您冗长的回答。@Yaneeve:您所说的[ActionForwarded to“success”在我现在必须添加的新功能之前就已经存在了,这是什么意思?你是说mapping.findForward吗?这不是你的转发发生的地方,而是你的转发目的地被检索的地方。在返回forwardPage很久之后,Forward将在ActionServlet中发生。我不确定我是否理解你想要做什么。我的意思是,很久以前,它是为一个特定的目的而写的。现在,我的新特性需要在它之前执行一些逻辑,并且只有在成功的情况下才能继续执行“原创性的”行动。意识到我的问题听起来很愚蠢,最终无意中得到了我想要的答案,我把它作为答案贴了下来。请随意评论……我不是说要抢节目。请看一下我添加到问题中的新编辑。也许这对我们双方都有帮助。同样感谢您冗长的回答。@Yaneeve:您所说的[ActionForwarded to“success”在我现在必须添加的新功能之前就已经存在了,这是什么意思?你是说mapping.findForward吗?这不是你的转发发生的地方,而是你的转发目的地被检索的地方。在返回forwardPage很久之后,Forward将在ActionServlet中发生。我不确定我是否理解你想要做什么。我的意思是,很久以前,它是为一个特定的目的而写的。现在,我的新功能需要在它之前执行一些逻辑,并且只有在成功的情况下才能继续执行“原始”操作