如图1:

我在使用struts2的标签iterator来遍历一个字符串数组。
如果像第一种写法,直接把字符串写在push中,那么用property输出值时,可以加#,也可以不加;
如果像第二中写法,interests是从服务器端的Action中传过来的,如下图:
然后我在property中使用#号,就取不到数据,不加#才可以取到。
哪位大神能帮忙解释下,不胜感激!
如图1:

我在使用struts2的标签iterator来遍历一个字符串数组。
如果像第一种写法,直接把字符串写在push中,那么用property输出值时,可以加#,也可以不加;
如果像第二中写法,interests是从服务器端的Action中传过来的,如下图:
然后我在property中使用#号,就取不到数据,不加#才可以取到。
哪位大神能帮忙解释下,不胜感激!
以下回答参考 皆我百晓生、券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。
在Struts 2中,<s:property> 标签用于从模型(Model)对象中获取或设置属性。在你的示例中,你有两个不同的情况:
s:push 标签并尝试将字符串赋给 value 属性时。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() 方法或者通过反射访问私有成员。