首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSF 2 UIRepeat。当复合组件嵌套在重复中时,可以访问valueExpression,但不能访问它的值?

JSF 2 UIRepeat。当复合组件嵌套在重复中时,可以访问valueExpression,但不能访问它的值?
EN

Stack Overflow用户
提问于 2010-11-25 20:29:41
回答 1查看 871关注 0票数 2

我以一种形式声明我的中继器(例如在main.xhtml中):

代码语言:javascript
复制
<!--<itemRenderer:MetaFieldRenderer item="{kueditmeta.metaFieldFirst}" >
    </itemRenderer:MetaFieldRenderer>-->
    <ui:repeat var="foo" value="#{kueditmeta.metaFields}"  >
         <itemRenderer:MetaFieldRenderer item="#{foo}" >
         </itemRenderer:MetaFieldRenderer>  
    </ui:repeat>

在提交表单中检查中继器中的MetaFieldRenderer.xhtml复合组件时,通过调用MetaFieldRenderer().getModel()查看一个属性:<cc:attribute name="item" />

在我的FacesComponent bean中,我公开了getModel()方法:

代码语言:javascript
复制
public MetaFieldModel getModel() {
        ELContext el = this.getFacesContext().getELContext();
        ValueExpression valExp = this.getValueExpression("item");
        Object itemValue = valExp.getValue(el);
        return (MetaFieldModel) itemValue;
    }

当我在itemValue中嵌套MetaFieldRenderer时,UIRepeat总是空的。但是,如果我取消注释,中继器外部的itemValue不是空的。

有人知道怎么回事吗?是否有更好的方法从和属性绑定到我的FacesComponent?我是否在组件中缺少一个必要的实现,以便UIRepeat确实更新它的子组件?

(我使用JSF2.0.3)

EN

回答 1

Stack Overflow用户

发布于 2011-04-23 00:57:00

我期望组件在几乎相同的阶段(或者至少在调用应用程序之前)填充自己(又名: action,navigateTo.)阶段)。但是在Invoke应用程序阶段的UIRepeat总是只包含一个子程序,它将用于重复的itemRenderer,数据还没有被重复(我猜它发生在呈现阶段?)。

通过这些步骤,我明白了一些事情:

  1. 还原视图阶段带回一个普通的UIRepeat,其子级在xhtml中声明。没有UIRepeat还没有填充任何内容,只有在这个点上没有任何值的itemRenderer。
  2. 来查看它的子组件(如果复合组件)在此时是如何不绑定到任何东西的,使用所需的属性<cc:attribute required="true"...,即使您给出了属性,也会抛出一个错误,因为
  3. 不会传递它们。

经验教训是,不要对复合组件backbean进行逻辑/验证,只需反映模型。现在,我使用一个模型列表来驱动我的中继器,它可以验证自己,如果模型包含一个警告消息或其他什么奇特的东西,我只是在复合组件中显示它。

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

https://stackoverflow.com/questions/4280645

复制
相关文章

相似问题

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