簡體   English   中英

p:orderlist和會話范圍的支持bean的問題

[英]Problems with p:orderlist and session scoped backing bean

我有一個名為MyController的會話作用域托管bean。 它引用了一個名為MyModel的POJO。 MyModel包含一些其他POJO的ArrayList,我將它綁定到ap:orderlist,如下所示:

                <p:orderList value="#{myController.myModel.list}" var="item" itemValue="#{item}" converter="#{itemConverter}"">
                    <f:facet name="caption">some title</f:facet>

                    <p:column>
                        #{item.text}
                    </p:column>
                </p:orderList>

我的轉換器看起來像這樣:

@ManagedBean
@RequestScoped
public class ItemConverter implements Converter {

    @ManagedProperty(value="#{myController.myModel.list}")
    private List<Item> list;


    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String value) {
        Iterator i = list.iterator();
        int id = Integer.parseInt(value);

        while (i.hasNext()) {
            Object currentObject = i.next();
            if (((Item) currentObject).getId() == id) {
                return currentObject;
            }
        }

        return null;
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {
        return Integer.toString(((Item) value).getId());
    }

}

我在myController中構建了一個接口和方法,以動態地將項目添加到訂單列表中。 當我第一次添加項目時,它似乎工作正常,列表更新並顯示新項目。 但是,當我添加第二個項目時,包含該列表的對話框將消失,即使從JavaScript控制台調用其show()方法也無法顯示。 通過調試,我發現在添加第二個項目時,我的列表已成為String的ArrayList,而不是聲明和定義的Item的ArrayList。 它包含我的轉換器的getAsString()方法返回的String,用於我添加到列表中的第一個項目。 當然,添加第二個項失敗,因為我正在嘗試將一個Item添加到字符串列表中。

這怎么可能? 我以為Java永遠不會允許List of Item替換為String of List。 甚至可以使用orderlist而不用它自己的字符串列表覆蓋源列表? 轉換器的工作不是首先將這些字符串轉換回對象嗎? 是否可以從項目列表構建服務器端的訂單列表,然后使用綁定屬性和值屬性映射到另一個字符串列表? 如果可能,我將如何在服務器端構建訂單列表?

編輯:修復了在getAsObject()中雙重調用i.next()的問題,但仍然得到一個字符串列表。 此外,嘗試使用context.getApplication().evaluateExpressionGet(context, "#{itemConverter}", itemConverter.class);手動實例化轉換器context.getApplication().evaluateExpressionGet(context, "#{itemConverter}", itemConverter.class); 返回null。

我的問題的原因是錯誤的導入。 我導入了javax.annotations.ManagedBean,而不是導入javax.faces.bean.ManagedBean。 因此,如果有人通過Google搜索解決問題的方式結束此頁面,請先檢查您的導入。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM