首先,如果不使用托管bean,就不能做到这一点。
最好的方法是使用
DataModel
作为
value
的
h:dataTable
以便可以通过以下方式检索当前选定的行对象:
DataModel#getRowData()
. 您只需要确保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>