在JSF中,如何在不使用托管bean的情况下将参数从一个页面传递到另一个页面?
e.g。
<h:dataTable value="#{myObjects}" var="object">
<h:column>
<h:commandButton value="View Object" action="view-object"/>
</h:column>
</h:dataTable>
我想传递对象以便下一页我可以简单地做#{object.displayValue}
Thxs。
答案 0 :(得分:5)
首先,如果不使用托管bean,就无法做到这一点。
最好的方法是使用DataModel
作为value
的{{1}},以便您可以按DataModel#getRowData()
检索当前选定的行对象。您只需要确保bean在后续请求中保留相同的模型。换句话说,在bean的构造函数中填充模型。
h:dataTable
使用请求(或会话)范围的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>
我假设您使用的是JSF 1.x而不是2.x,否则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;
}
}
bean是better。
在下一页:
@ViewScoped