【问题标题】:JSF Pass parameter to another pageJSF 将参数传递到另一个页面
【发布时间】:2010-06-09 23:38:21
【问题描述】:

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

例如

<h:dataTable value="#{myObjects}" var="object">
<h:column>              
        <h:commandButton value="View Object" action="view-object"/>
</h:column>                                             
</h:dataTable>  

我想传递对象,以便下一页我可以简单地执行 #{object.displayValue}

谢谢。

【问题讨论】:

    标签: jsf


    【解决方案1】:

    首先,如果不使用托管 bean,您将无法做到这一点。

    最好的方法是使用DataModel 作为h:dataTablevalue,这样您就可以通过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 bean 是 better

    在下一页:

    <p>#{bean.item.value}</p>
    

    【讨论】:

    • 我使用 JSF2.0、glassfish 3.0.1 和 ViewScoped bean 以这种方式设置我的 dataTable。当我导航到我的显示页面时,什么都没有显示。似乎当我离开带有 dataTable 的页面时,所有变量都超出了范围。
    猜你喜欢
    • 2016-01-24
    • 1970-01-01
    • 2017-08-20
    • 2012-10-01
    • 2011-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多