JSF将参数传递给另一页
问题描述:
在JSF中,如何在不使用托管bean的情况下将参数从一个页面传递到另一个页面?JSF将参数传递给另一页
例如
<h:dataTable value="#{myObjects}" var="object">
<h:column>
<h:commandButton value="View Object" action="view-object"/>
</h:column>
</h:dataTable>
我要传递的对象,这样的下一个页面,我可以简单地做#{} object.displayValue
Thxs。
答
首先,如果不使用托管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