在你有車名的列表和類型列表之間沒有相關性和Java結構。它們不相關,因此不清楚如何將它們綁定在一起。
您應該使用JavaBeans的約定,並創建一個汽車類,像
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;
發佈您的Java結構(carNames) –