Как получить имена динамических параметров в перенаправлении действия Struts 2?

Итак, я пытаюсь создать перенаправление действия, которое имеет имена динамических параметров, а также значения. Я понимаю, как это сделать в файле 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 имеют соответствующие имена геттеров/сеттеров внутри ObjectAction.

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


person throwaway256623    schedule 04.04.2011    source источник
comment
проверьте этот вопрос SO, может быть, это поможет вам SO Question   -  person Umesh Awasthi    schedule 04.04.2011
comment
Да, я действительно нашел этот вопрос, прежде чем опубликовать свой собственный. Если вы посмотрите на то, что якобы работает, то оно по сути идентично тому, что я написал, но мое, похоже, не оценивает правильно. Спасибо хоть!   -  person throwaway256623    schedule 04.04.2011
comment
это кажется немного странным, так как это должно работать. Пожалуйста, проверьте, не должно ли ваше имя параметра быть пустым и не должно быть пустым.   -  person Umesh Awasthi    schedule 04.04.2011
comment
Это не пусто. На самом деле, добавление <param name="test">${paramName}</param> в результат показывает, что paramName правильно оценивается в URL-адресе, когда он используется в качестве значения, но все же неправильная оценка при использовании его в качестве имени. Это очень странно.   -  person throwaway256623    schedule 04.04.2011
comment
странно, даже я теперь не в курсе..   -  person Umesh Awasthi    schedule 04.04.2011
comment
разве ваш тип результата не должен быть перенаправленным действием?   -  person geowa4    schedule 05.04.2011
comment
Он был переименован между версиями 2.0 и 2.1 ссылка   -  person throwaway256623    schedule 05.04.2011


Ответы (1)


Это работает.

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

В 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
person prem30488    schedule 20.04.2014