Struts 2. s:属性。如何获取名称作为参数传递给jsp的变量的值?

时间:2017-03-31 12:36:21

标签: java jsp struts2 tags

我有一个班级Message.java,其中有两个相同类型Location.java的变量origindestination

Message.java

public class Message{

    private Location origin;
    private Location destination;

//Getters and setters correctly defined   
}

Location.java

public class Location{

private String address;    
}

MessageAction.java

 public class MessageAction {

        private Message message;
       //Getters and setters correctly defined   
    }

我想重用代码,所以我创建了一个通用的JSP并通过参数传递这些变量的名称。 (当然,代码更复杂,这只是一个基本的例子,所以它真的有助于我重用代码)

message.jsp

<s:push value="message">
    <s:include value="/jsp/location.jsp">
        <s:param name="variableName" value="'origin'" />
    </s:include>
    <s:include value="/jsp/location.jsp">
        <s:param name="variableName" value="'destination'" />
    </s:include>
</push>

问题来了,我不知道如何显示%{variableName}.address的值。我尝试了几种组合,谷歌搜索了一段时间,但我没有找到任何东西。

location.jsp

<s:set name="variableName">${param.variableName}</s:set>
<s:property value="%{%{variableName}.address}" />

如果我直接写变量的名称,我会正确地收到它们的值,所以Action正确设置它们。

<s:property value="origin.address" />
<s:property value="destination.address" />

1 个答案:

答案 0 :(得分:0)

这是错误的OGNL表达

%{%{variableName}.address}

如果要将JSP重用为模板,则应使用有效的OGNL表达式。然而,传递参数名称是巨大的,因为您将有复杂的OGNL来返回此参数名称的值。

你也应该知道

  

参数作为请求参数传递,因此请使用${param.ParamName}表示法来访问它们。不要使用property标记来访问包含文件中的参数。