在 JSP 脚本分隔符中使用 OGNL
Using OGNL inside a JSP scripting delimiters
如何在脚本定界符内使用 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
在 Java 结构中,汽车名称列表和类型列表之间没有关联。它们不相关,因此不清楚如何将它们绑定在一起。
您应该使用 JavaBeans 约定并创建汽车 class,如
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:
@Setter private Car selectedCar;
在脚本定界符中不能使用 OGNL。您应该删除小脚本并将其替换为 <s:property>
标记或使用 ${}
.
<option value="<s:property value='%{car.type[#incr.index]}'/>">
它展示了如何在 HTML 个标签中使用 OGNL。
如果您正在使用 select 标签,我建议您阅读 。
如何在脚本定界符内使用 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
在 Java 结构中,汽车名称列表和类型列表之间没有关联。它们不相关,因此不清楚如何将它们绑定在一起。
您应该使用 JavaBeans 约定并创建汽车 class,如
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:
@Setter private Car selectedCar;
在脚本定界符中不能使用 OGNL。您应该删除小脚本并将其替换为 <s:property>
标记或使用 ${}
.
<option value="<s:property value='%{car.type[#incr.index]}'/>">
它展示了如何在 HTML 个标签中使用 OGNL。
如果您正在使用 select 标签,我建议您阅读