首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >p:orderlist和会话作用域支持bean的问题

p:orderlist和会话作用域支持bean的问题
EN

Stack Overflow用户
提问于 2012-07-04 22:49:35
回答 1查看 888关注 0票数 0

我有一个名为MyController的会话范围的托管bean。它引用了一个名为MyModel的POJO。MyModel包含一些其他POJO的ArrayList,我将其绑定到p:orderlist,如下所示:

代码语言:javascript
复制
                <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>

我的转换器看起来像这样:

代码语言:javascript
复制
@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()方法也无法显示。通过调试,我发现在添加第二个item时,我的list变成了String的ArrayList,而不是声明和定义的Item的ArrayList。它包含将由我的转换器的getAsString()方法为我添加到列表中的第一项返回的字符串。当然,添加第二个项目会失败,因为我正在尝试将一个项目添加到字符串列表中。

这怎麽可能?我认为Java永远不会允许将条目列表替换为字符串列表。有没有可能使用orderlist而不让它用自己的字符串列表覆盖源列表?转换器的工作不是首先将这些字符串转换回对象吗?可以在服务器端从项目列表构造orderlist,然后使用binding属性和value属性映射到另一个字符串列表吗?如果可能,我将如何在服务器端构造orderlist?

编辑:修复了在getAsObject()中双重调用i.next()的问题,但仍然获得字符串列表。此外,尝试使用context.getApplication().evaluateExpressionGet(context, "#{itemConverter}", itemConverter.class);手动实例化转换器将返回null。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-05 19:56:05

我的问题的原因是错误的导入。我导入了javax.annotations.ManagedBean而不是导入javax.faces.bean.ManagedBean。因此,如果有人通过谷歌搜索他们的问题的解决方案,最终出现在这个页面上,首先检查您的导入。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11331355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档