如何在脚本分隔符中使用OGNL?
<s:iterator var="arr" value="%{carNames}" status="incr">
<option value="<%=car.getType()["#incr.index"]%>" >
<s:property value="arr"/>
</option>
</s:iterator>
这是我的Car
结构:
private String[] carNames = {"A", "B", "C"};
public static Integer[] getType() {
return new Integer[]{
new Integer(Global.DISEL),
new Integer(Global.TESLA),
new Integer(Global.HYBRID)
};
}
//getter and setter
答案 0 :(得分:1)
在Java结构中,您的车名列表与类型列表之间没有相关性。它们是无关的,因此不清楚如何将它们绑在一起。
您应该使用JavaBeans约定并创建一个Car类,如
public class Car implements Serializable {
@Getter @Setter private Long id;
@Getter @Setter private String name;
@Getter @Setter private Integer type; // but an Enum would be better
}
然后声明一个数组
@Getter private Car[] cars;
或列表
@Getter private List<Car> cars;
在操作中,然后代码将是:
<select name="selectedCar">
<s:iterator value="cars" status="incr">
<option value="<s:property value='cars[%{#incr.index%}].id'/>" >
<s:property value="cars[%{#incr.index%}].type"/> -
<s:property value="cars[%{#incr.index%}].name"/>
</option>
</s:iterator>
</select>
相当于
<select name="selectedCar">
<s:iterator var="currentCar" value="cars" >
<option value="<s:property value='#currentCar.id'/>" >
<s:property value='#currentCar.type'/> -
<s:property value="#currentCar.name"/>
</option>
</s:iterator>
</select>
相当于
<select name="selectedCar">
<s:iterator value="cars" >
<option value="<s:property value='id'/>" >
<s:property value="type"/> -
<s:property value="name"/>
</option>
</s:iterator>
</select>
相当于
<select name="selectedCar">
<s:iterator value="cars" >
<option value="<s:property value='id'/>" >
<s:property value="%{type + ' - ' + name}"/>
</option>
</s:iterator>
</select>
但使用<s:select />
Struts标记:
<s:select name="selectedCar"
list="cars"
listKey="id"
listValue="%{type + ' - ' + name}" />
并且根本没有迭代器。
要阅读选定的汽车,您只需在目标操作中放置一辆汽车和一台安装员:
@Setter private Car selectedCar;
答案 1 :(得分:1)
在脚本分隔符中,您无法使用OGNL。您应删除scriptlet并将其替换为<s:property>
标记,或使用${}
。
<option value="<s:property value='%{car.type[#incr.index]}'/>">
它显示了如何在HTML标记中使用OGNL。
如果您使用的是select标记,建议您阅读Struts2 select tag - Dynamically add options。