代码之家  ›  专栏  ›  技术社区  ›  DD.

JSF将参数传递到另一页

jsf
  •  3
  • DD.  · 技术社区  · 14 年前

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

    例如

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

    我想传递对象,这样下一页我就可以简单地执行object.displayValue

    THXS。

    1 回复  |  直到 14 年前
        1
  •  5
  •   BalusC    14 年前

    首先,如果不使用托管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>