【问题标题】:JSF 1.2 Custom Component - Body Content From Backing BeanJSF 1.2 自定义组件 - 来自 Backing Bean 的正文内容
【发布时间】:2010-10-14 17:00:04
【问题描述】:

我正在使用 JSF 1.2 开发一个自定义组件。我的标签类扩展了UIComponentELTag 并具有ValueExpression 类型的变量。这些值是从标签的相应属性中设置的(使用setProperties 函数),例如

<sr:show name="#{backingBean.name}" ...> #{backingBean.mainContent}</sr:show>

当我尝试将标签的 bodyContent 作为绑定值时,我被卡住了。 这是我已经走了多远:

public int doAfterBody() throws JspException{
    if(bodyContent!=null) {
        String body = bodyContent.getString();
        FacesContext context = FacesContext.getCurrentInstance();
        UIComponent component = super.findComponent(context);
        MyComp myComp= (MyComp) component;
        myComp.setMain(body);
    }
    bodyContent.clearBody();
    return SKIP_BODY;
}

如果标记的主体不包含绑定值,则此代码可以正常工作。我想检查主体是否具有绑定值,然后从 bean 设置值。

在 JSF 1.1 中,我使用 isValueReference(body) 进行了检查。我如何在 JSF 1.2 中实现这一点?我在任何地方都找不到任何将正文内容作为绑定值的示例。

【问题讨论】:

    标签: java jsf jakarta-ee custom-component


    【解决方案1】:

    为什么不简单地添加另一个变量,例如“内容”并将其绑定到您要呈现的正文?

    <sr:show name="#{backingBean.name}" text="#{backingBean.mainContent}" />
    

    或者简单地说:

    <sr:show bean="#{backingBean} />
    

    并渲染整个地段。

    【讨论】:

    • 如果用户想在没有bean的情况下直接提供值,是否建议将大量内容作为标签属性的一部分?(例如,text = mainContent,其中mainContent可能包含大量内容或xml或其他任何东西)自定义标签应同时支持绑定值和直接值。
    • 我自己只是在学习这些东西——抱歉。根据您拥有多少逻辑与格式化,您可以为此使用 facelets 组合组件。此外,您可以将表示逻辑分离到一个标签中,并将结果设置为一个变量,然后使用其他元素进行格式化
    • 我允许在标签正文中输入主要内容。而且我还提供了一个可以采用 ValueExpression 的属性文本。这样,用户可以在标签的正文中输入格式化的硬编码文本,或者他可以从支持 bean 提供文本属性的值。我用这个解决方案安定下来。希望其他人觉得这些信息有用。
    猜你喜欢
    • 2012-03-15
    • 2011-03-17
    • 2018-12-25
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 2015-01-13
    • 2012-08-16
    • 2012-04-26
    相关资源
    最近更新 更多