提问人:Raja 提问时间:1/14/2023 最后编辑:Roman CRaja 更新时间:3/18/2023 访问量:176
如何在 s:select 标签中使用 struts2 s:set 变量作为列表值?
How to use struts2 s:set variable inside s:select tag for list values?
问:
我想在里面使用一个变量:s:set
s:select
<s:set var="cityNY">NewYork</s:set>
<s:select name="cities" list="#{'%{#cityNY}':'%{#cityNY}'}" required="true" />
上面只是在我的页面中打印了相同的值 -%{#cityNY}
想要在标签的选项中显示值 if 变量s:set
s:select
答:
0赞
Roman C
1/14/2023
#1
您需要将上下文变量直接放入 OGNL 表达式中,而不使用 .它将实例化一个地图。%{}
<s:select name="cities" list="#{#cityNY:#cityNY}" required="true" />
属性值可以包含 OGNL 表达式。默认情况下,它用于解析 OGNL 的值,而不显式。子表达式可以直接在 OGNL 表达式中引用。 是用于实例化 .它内部有子表达式。每个子表达式都应返回一个值,该值不是集合。因为他们曾经为地图创建键/值对。list
%{}
#{exp1:exp2}
Map
如果您使用相同的子表达式,则最好使用以下代码实例化List
<s:select name="cities" list="{#cityNY}" required="true" />
它将生成一个 HTML 标签,其中包含具有相同值和文本的标签。<select>
<option>
如果您需要更多选项,则应使用逗号向 OGNL 表达式添加值。
您可以在我对 OGNL/Struts2 JSP 将 bean 分配给对象的回答中找到参考文档。
评论
0赞
Roman C
2/11/2023
你是怎么得到我的答案的?如果这个答案帮助你解决了你的问题,那么你应该把它标记为接受的答案。该复选框位于答案的左侧。
0赞
iamcessssy
9/22/2023
嗨@Roman C,我也遇到 Ognl 表达式在 radio tag 中作为属性传递时在“list”中不起作用。我们正在从 struts 2.3.x 迁移到 struts 2.5.x。代码<s:radio id=“%{#attr.id}” name=“%{#attr.name}” list=“%{(#attr.ognlExpression)(#attr)}” onclick=“%{#attr.onclick}” /> ..ognlExpression=“#{'Y':'Yes', 'N':'No'}” 的值从作为属性传递的父 jsp 传递。这在迁移之前有效,然后在迁移之后不再有效。你能分享一些解决方案吗?谢谢
1赞
Roman C
9/22/2023
@iamcessssy您正在使用 ognl 做一些复杂的事情。应将此逻辑移至操作中。在视图中执行复杂的逻辑不是一个好的做法。
0赞
iamcessssy
9/25/2023
嗨,@Roman C,你能解释一下为什么会这样吗?当我直接将值“#{'Y':'Yes', 'N':'No'}” 放在列表单选标记中时,如下所示 <s:radio id=“%{#attr.id}” name=“%{#attr.name}” list=“#{'Y':'Yes', 'N':'No'}”“ onclick=”%{#attr.onclick}“ />。它运行良好,可以读取 ognl 表达式。但是当我动态传递此值时,它被视为字符串文字,并将其按原样显示在视图中,作为表达式“#{'Y':'Yes', 'N':'No'}”,而不是显示 yes 和 no 选项。Struts 2.5.x 中 ognl 中有哪些主要变化会影响以前的工作代码?
1赞
Roman C
9/25/2023
@iamcessssy这是因为您在 struts 标记属性中使用了 ognl 对表达式进行了两次计算。这是不允许的。
下一个:如何访问支柱标签的嵌套标签?
评论