当前位置: 首页 > 面试题库 >

在Struts 2中将ActionForward与动态参数一起使用

淳于健
2023-03-14
问题内容

在将应用程序从Struts 1迁移到Struts 2时

在某些地方,基于请求参数,同一操作类已用于不同类型的视图。

例如:如果createTypeis为1意味着需要附加一个参数,或者如果createTypeis
2意味着需要附加更多额外的参数,例如,我需要使用将动态参数传递给其他操作ActionForward

struts-config.xml

<action path="/CommonAction" type="com.example.CommonAction" scope="request">
    <forward name="viewAction" path = "/ViewAction.do"/>
</action>

动作班

public class CreateAction extends Action
{
    public ActionForward execute(ActionMapping m, ActionForm f, HttpServletRequest req, HttpServletResponse res) throws ServletException, Exception
    {
            String actionPath = m.findForward("viewAction").getPath();
            String createType = req.getParameter("createType");
            String params = "&action=view";
            if("1".equals(createType)){
               params = params + "&from=list";
            }else if("2".equals(createType)){
               params = params + "&from=detail&someParam=someValue";
            }//,etc..
            String actionUrl = actionPath+"?"+params;
            return new ActionForward(actionUrl);
    }
}

但是,我无法在Struts 2中做同样的事情。在Struts 2中ActionForward,动态参数可以使用吗?


问题答案:

您可以将动态参数与一起使用result,请参见动态结果配置。

在操作中,您应该为参数表编写吸气剂

private String actionUrl;

public String getActionUrl() {
    return actionUrl;
}

并配置结果

<action name="create" class="CreateAction">
    <result type="redirect">${actionUrl}</result>
</action>

因此,常识是将代码重写为

public class CreateAction extends ActionSupport
{

    private String actionUrl;

    public String getActionUrl() {
        return actionUrl;
    }

    @Override
    public String execute() throws Exception
    {
            String actionPath = "/view";
            String createType = req.getParameter("createType");
            String params = "&action=view";
            if("1".equals(createType)){
               params = params + "&from=list";
            }else if("2".equals(createType)){
               params = params + "&from=detail&someParam=someValue";
            }//,etc..
            actionUrl = actionPath+"?"+params;
            return SUCCESS;
    }
}

如果您需要一种更好的方法来从操作映射中创建URL,则可以查看此答案。



 类似资料:
  • 问题内容: 我有这个规格 使用此页面定义 我需要像上面一样动态配置属性:SEE 问题答案: 据我所知,这并不存在。该批注采用静态而已。您可能需要自定义修改注释处理器,类似于此博客的行为:https ://web.archive.org/web/20180612042724/http: //brimllc.com/2011/01/selenium-2-0-webdriver-扩展查找以支持动态idx

  • 问题内容: 我正在使用Spring,Spring Data JPA,Spring Security,Primefaces的项目中工作… 在本教程中,你只能在预定义的数据源之间实现动态数据源切换。 这是我的代码的片段: springContext-jpa.xml 我想做的就是使targetDataSources映射也与其元素一样动态。 换句话说,我想获取某个数据库表,使用存储在该表中的属性创建我的数

  • 我在一个使用Spring、Spring数据JPA、Spring Security、Primefaces的项目中工作。。。 我正在学习关于spring动态数据源路由的教程。 在本教程中,您只能在预定义的数据源之间实现动态数据源切换。 以下是我的代码片段: springContext jpa。xml 我想做的是使targetDataSources映射与它的元素一样动态。 换句话说,我想获取一个特定的数

  • 问题内容: 对于我的学校项目,我正在创建一款类似iPhone坏苹果的游戏(不是我个人的选择,但这不是问题)。 游戏需要有两个版本,第一个版本在控制台中,第二个版本在JavaFX中。但我想进一步说明这一点。我想添加用户在启动游戏时可以添加到终端的参数,例如 java -jar BadApplesClone.jar –height = 10 –width = 10 –numPieces = 5 然后,

  • 问题内容: 我正在尝试使用动态变量名称(我不确定它们的实际名称),但是非常像这样: 返回值告诉我它不起作用。我不知道我在寻找什么语法或技术,这使得很难研究。在前面定义。 问题答案: 将它们包装在: 工作实例 使用是创建动态变量的一种方法,简单的示例:

  • 问题内容: 我刚刚开始学习Java流,并遇到了问题。请看下面的例子。这是Node类的一部分: 我的意图是在流中的每个节点上使用名称和结果参数调用#findChildren。我尝试使用方法引用Node :: findChildren时没有运气。我将不胜感激的解决方案与运营商。 是否可以将方法引用与参数一起使用?我喜欢流的想法,我只想使代码更具可读性。 实际上,我认为还有一个类似的问题,方法引用具有读