代码之家  ›  专栏  ›  技术社区  ›  Brian Leathem

如何将操作字符串传递到JSF2复合组件中?

  •  11
  • Brian Leathem  · 技术社区  · 16 年前

    我正在jsf2中创建一个简单的menuing复合组件。但是,我无法将String属性传递到复合组件中,以便在<的action属性中使用;h:commandLink>。我的组件看起来像:

    <composite:interface>
        <composite:attribute name="title" required="true" type="java.lang.String"/>
        <composite:attribute name="view" required="true" />
    </composite:interface>
    
    <!--implementation-->
    <composite:implementation>
        <li><h:commandLink action="#{cc.attrs.view}" value="#{cc.attrs.title}" /></li>
    </composite:implementation>
    

    如何将操作字符串放入<的action属性中;h:commandLink>?

    2 回复  |  直到 15 年前
        1
  •  23
  •   BalusC    14 年前

    看起来这吸引了霍斯特曼:-)

    必须将属性命名为“action”并使用重定目标。然后,一些特殊的处理踢在与精致的清晰度(而不是)描述

    http://docs.oracle.com/javaee/6/javaserverfaces/2.0/docs/pdldocs/facelets/composite/attribute.html

    这是你怎么做的。

    <composite:interface>
        <composite:attribute name="title" required="true" type="java.lang.String"/>
        <composite:attribute name="action" targets="view" required="true" />
    </composite:interface>
    
    <!--implementation-->
    <composite:implementation>
        <li><h:commandLink id="view" value="#{cc.attrs.title}" /></li>
    </composite:implementation>
    
        2
  •  1
  •   Jörn Horstmann    16 年前

    您需要将属性的类型定义为如下方法:

    <composite:attribute name="view" method-signature="java.lang.String f()"/>
    

    或者,一些属性名在jsf中是专门处理的。因此,如果您将属性命名为“action”,它也应该在没有方法签名的情况下工作:

    <composite:attribute name="action"/>
    

    编辑: 我可能误解了这个问题,如果您想链接到视图id而不调用操作,那么可以使用 h:link 标记而不是 h:commandLink

    <h:link outcome="#{cc.attrs.view}" value="#{cc.attrs.title}"/>