Как получить динамические имена параметров в перенаправлении действия Struts 2? - PullRequest
4 голосов
/ 04 апреля 2011

Итак, я пытаюсь создать перенаправление действий, которое имеет как динамические имена параметров, так и значения. Я понимаю, как это сделать в файле struts.xml для значений параметров, но, похоже, не получается правильно оценить параметры параметра.

    <action name="SaveObject" method="save"
        class="com.mysite.actions.ObjectAction">
        <result name="success" type="redirectAction">
            <param name="actionName">${actionName}</param>
            <param name="${paramName}">${paramValue}</param>
        </result>
    </action>

Теперь с $ {actionName} и $ {paramValue} у меня нет абсолютно никаких проблем. ActionName, paramValue и paramName имеют соответствующие имена getters / setters внутри ObjectAction.

Кто-нибудь знает, как я могу заставить $ {paramName} правильно оценивать? В настоящее время он отображается как «$ {paramName}» в URL, и мне нужно, чтобы оно было значением переменной paramName. Я попытался использовать #paramName и% {paramName} из-за моего неправильного понимания OGNL, и все они также неправильно отображаются в URL. Я также попытался добавить параметр parse = true, но я считаю, что в Struts 2 это все равно будет по умолчанию.

1 Ответ

1 голос
/ 20 апреля 2014

Работает.

   <action name="login" class="com.common.LoginAction" >
         <result name="success" type="redirectAction">
          <param name="actionName">${actionName}</param>
         <param name="${paramName}">${paramValue}</param>
         </result>
  </action>

В LoginAction.java

  package com.common;
  import com.opensymphony.xwork2.ActionSupport;
  public class LoginAction extends ActionSupport {
private static final long serialVersionUID = -1449554101273745861L;

private String paramName;
private String actionName;
private String paramValue;
public String execute(){

    paramName="id";
    setParamValue("1");
    setActionName("home");
    return SUCCESS; 
}
public void setParamName(String paramName) {
    this.paramName = paramName;
}
public String getParamName() {
    return paramName;
}
public void setParamValue(String paramValue) {
    this.paramValue = paramValue;
}
public String getParamValue() {
    return paramValue;
}
public void setActionName(String actionName) {
    this.actionName = actionName;
}
public String getActionName() {
    return actionName;
}
 }

Дает URL

 http://localhost:8080/ProjectName/home.action?id=1

Теперь в HomeAction.java

 package com.common;

 import com.opensymphony.xwork2.ActionSupport;

public class HomeAction extends ActionSupport{
private static final long serialVersionUID = -127700165200747324L;
private int id;
public String execute(){

    return SUCCESS; 
}
public void setId(int id) {
    this.id = id;
}
public int getId() {
    return id;
}
}

А

 <action name="home" class="com.common.HomeAction" >
        <result name="success">Home.jsp</result> 
        <result name="error">index.jsp</result>
        <result name="input">index.jsp</result>
  </action>

In Home.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib uri="/struts-tags" prefix="s" %>

id=${id}<br/>

Дает вывод

 id=1
...