【问题标题】:create a unordered list in jsf (ul)在 jsf (ul) 中创建一个无序列表
【发布时间】:2011-03-08 05:44:42
【问题描述】:

您好,我需要在 jsf 中实现一个无序列表——只是想知道我是否必须为此创建一个自定义标签?我曾尝试使用<ul>,但它目前不在 jsf 组件树中。干杯

【问题讨论】:

  • 您使用的是 JSF 1.2 吗? JSF 2.0? JSP? Facelets?
  • @brandizzi:如果我使用带有 facelets 的 JSF 2.0 会有什么不同?提前致谢。
  • 如果@johnathan 使用带有Facelets 的JSF 2,它的视图只是带有一些用于JSF 组件的其他名称空间(例如“f”和“h”)的XHTML。在这种情况下,他可以使用在 XHTML 中使用的 ul 和 li 标记。 JSP 的情况并非如此,因为 JSF 组件是来自标记库的标记,以与将裸 JSP 输出(例如 HTML 标记)添加到结果页面的短语不同的短语呈现。

标签: jsf


【解决方案1】:

但它目前落在 jsf 组件树之外

这表明您使用的是旧版 JSF 1.0/1.1。更多详细信息另请参阅JSF/Facelets: why is it not a good idea to mix JSF/Facelets with HTML tags?

你基本上有 3 个选择:

  1. 升级到 JSF 1.2。它具有与 JSF 1.0/1.1 完全相同的环境要求,因此不需要任何其他更改,只需替换 JAR 就足够了。完成后,您可以毫无困难地写下“纯 HTML”。

    <ul>
        <li>item 1</li>
        <li>item 2</li>
        <li>item 3</li>
    </ul>
    

  2. 如果升级真的不是一种选择,那真的很奇怪,那么将纯 HTML 块包装在 &lt;f:verbatim&gt; 中。

    <f:verbatim>
        <ul>
            <li>item 1</li>
            <li>item 2</li>
            <li>item 3</li>
        </ul>
    </f:verbatim>
    

    请注意,您不一定需要包装每个单独的标签。只有在“中途”遇到 JSF 组件时才关闭并重新打开它。甚至以下内容也是有效的。

    <f:verbatim>
        <ul>
            <li>item 1</li>
            <li></f:verbatim><h:outputText value="#{bean.some}" /><f:verbatim></li>
            <li>item 3</li>
        </ul>
    </f:verbatim>
    

  3. 使用与 JSF 1.0/1.1 兼容的组件库,它提供了一个开箱即用的组件,可生成 &lt;ul&gt;&lt;li&gt;。我只想到一个:Tomahawk&lt;t:dataList&gt;。只需将其layout 属性设置为unorderedlist 即可使其生成&lt;ul&gt;&lt;li&gt;

    <t:dataList layout="unorderedList" value="#{bean.list}" var="item">
        <h:outputText value="#{item}" />
    </t:dataList>
    

【讨论】:

  • ui:repeat with
  • 也不是一个选项吗?
【解决方案2】:

非常粗略 - 我知道,但只是为老好人安定下来:

<f:verbatim> tag e.g. `
<f:verbatim><ul></f:verbatim>
<f:verbatim><li></f:verbatim>Lorem ipsum dolor sit amet<f:verbatim></li></f:verbatim>
<f:verbatim><li></f:verbatim>Lorem ipsum dolor sit amet<f:verbatim></li></f:verbatim>
<f:verbatim><li></f:verbatim>Lorem ipsum dolor sit amet<f:verbatim></li></f:verbatim>
<f:verbatim><li></f:verbatim>Lorem ipsum dolor sit amet<f:verbatim></li></f:verbatim>
<f:verbatim><li></f:verbatim>Lorem ipsum dolor sit amet<f:verbatim></li></f:verbatim>
<f:verbatim></ul><f:verbatim>`

【讨论】:

  • AFAIK 你不再需要 f:verbatim 来自定义 HTML(从 JSF 1.2 开始)。
  • @Kawu 如果使用 facelets 和 JSF 2.0,我们可以直接在 f:view 中编写 html 吗?
  • 试试吧,我一直都这样做。不混合 JSF 和 HTML 标记是 JSF 1.0 时代的神话。现在我也取得了进展,您绝对应该考虑使用 RichFaces 或一些类似的高级 GUI 库。自从我强迫自己使用一个代码后,我对任何一行代码都不后悔(我有效地保存了代码,因为其他人做了所有的工作)......
【解决方案3】:

您不必将每个开始标记、内部文本和结束标记都嵌入到不同的&lt;f:verbatim&gt; 中。你可以这样做:

<f:verbatim>
<ul>
 <li>foo</li>
 <li>bar</li>
 <li>baz</li>
</ul>
</f:verbatim>

或者,您可以使用 Facelets,它处理 JSF 和 HTML 标签的交错,就像一个魅力。

希望这会有所帮助。

【讨论】:

  • 我在 JSF 2.0 中使用 facelets。我的案例还需要在f:verbatim 标签中包含html吗?谢谢!
  • @Marcos:在 Facelets 中,f:verbatim 根本不需要。 f:verbatim 只有在 JSP 页面中使用 JSF 时才需要。
猜你喜欢
相关资源
最近更新 更多
热门标签