shuizhongjiete 2019-10-28 22:14 采纳率: 0%
浏览 219

struts2的property标签的value属性什么时候加#?

如图1:

图片说明

我在使用struts2的标签iterator来遍历一个字符串数组。
如果像第一种写法,直接把字符串写在push中,那么用property输出值时,可以加#,也可以不加;
如果像第二中写法,interests是从服务器端的Action中传过来的,如下图:
图片说明

然后我在property中使用#号,就取不到数据,不加#才可以取到。
哪位大神能帮忙解释下,不胜感激!

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-07-29 21:03
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在Struts 2中,<s:property> 标签用于从模型(Model)对象中获取或设置属性。在你的示例中,你有两个不同的情况:

    1. 当你使用 s:push 标签并尝试将字符串赋给 value 属性时。
    2. 当你使用 s:property 标签并尝试将字符串赋给 value 属性时。

    当你使用 s:push 标签时,如果想要为 value 设置一个动态的值,你可以使用 #{} 符号作为占位符,并将其替换为变量或表达式的结果。例如,在你的第一个示例中,如果你想要将一个包含三个元素的字符串数组传递给 value,你可以这样写:

    <s:push value="{% for i in ['aa', 'bb', 'cc'] %}{{i}}{% endfor %}">
    

    在这个例子中,#{% for i in ['aa', 'bb', 'cc']}{{i}}{% endfor %} 是一个模板语法,它会根据当前的迭代器值生成相应的字符串。{{i}} 表示每次迭代都会被替换成迭代器的当前值。

    然而,当你使用 s:property 标签时,你需要确保你提供的值是一个有效的Java表达式,即它可以解析成一个Java对象或者其子类。在这种情况下,#{v}#{#v} 都是无效的,因为它们无法正确地表示一个Java表达式。如果你想在 value 中提供一个Java表达式,你应该使用 {#...} 这样的语法,而不是直接使用 # 或者 #{}。例如,

    <s:property value="{#v}" />
    

    这个语句表示从 v 对象中获取一个值,并将其插入到 value 中。请注意,这种方法只适用于返回一个基本类型(如String、Integer等),而不适用于复杂类型的对象。对于复杂的类型,你应该使用更高级的方法,如 get() 方法或者通过反射访问私有成员。

    评论

报告相同问题?