JSF将参数传递给另一个页面

DD.*_*DD. 3 jsf

在JSF中,如何在不使用托管bean的情况下将参数从一个页面传递到另一个页面?

例如

<h:dataTable value="#{myObjects}" var="object">
<h:column>              
        <h:commandButton value="View Object" action="view-object"/>
</h:column>                                             
</h:dataTable>  
Run Code Online (Sandbox Code Playgroud)

我想传递对象所以我可以简单地做下一页#{object.displayValue}

Thxs.

Bal*_*usC 5

首先,如果不使用托管bean,则无法执行此操作.

最好的方法是使用a 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>
Run Code Online (Sandbox Code Playgroud)

使用请求(或会话)作用域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;
    }

}
Run Code Online (Sandbox Code Playgroud)

我假设您使用的是JSF 1.x而不是2.x,否则@ViewScopedbean会更好.

在下一页:

<p>#{bean.item.value}</p>
Run Code Online (Sandbox Code Playgroud)