首先,如果不使用託管bean,則無法執行此操作。
的最好的辦法是使用DataModel
作爲h:dataTable
,這樣就可以通過檢索DataModel#getRowData()
當前選擇行對象的value
。您只需確保該Bean在後續請求中保留相同的模型。換句話說,在bean的構造函數中填充模型。
<h:form>
<h:dataTable value="#{bean.model}" var="item">
<h:column>
<h:commandButton value="View Object" action="#{bean.view}"/>
</h:column>
</h:dataTable>
</h:form>
與請求(或會話)範圍的bean看起來像這樣:
public class Bean {
private DataModel model;
private Item item;
public Bean() {
List<Item> list = new ArrayList<Item>();
list.add(new Item(1, "value1"));
list.add(new Item(2, "value2"));
list.add(new Item(3, "value3"));
model = new ListDataModel(list);
}
public String view() {
item = (Item) model.getRowData();
return "view";
}
public DataModel getModel() {
return model;
}
public Item getItem() {
return item;
}
}
我假設你正在使用JSF 1.x和2.x的不還的,否則,@ViewScoped
豆是better。
而且在接下來的頁面:
<p>#{bean.item.value}</p>
設置我的dataTable這樣,使用JSF2.0,GlassFish的3.0.1和ViewScoped豆。當我導航到我的顯示頁面時,什麼也沒有顯示。看起來,當我用dataTable離開頁面時,所有的變量都超出了範圍。 – Sean 2011-01-21 20:22:36