将应用程序从Struts 1迁移到Struts 2
在某些地方,根据请求参数,相同的操作类已用于不同类型的视图。
例如:如果createType
为1表示需要附加一个参数,或者如果createType
为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
与动态参数一起使用?
答案 0 :(得分:5)
您可以使用result
的动态参数,请参阅dynamic result configuration。
在动作中你应该为参数编写一个getter
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;
}
}
如果您需要更好的方法来创建动作映射的网址,您可以查看this回答。