有条理地包装HTML元素

时间:2008-11-07 13:20:06

标签: list jsf seam

在我的Seam应用程序中,我有一个Seam组件,它返回一个(@Datamodel)项目列表,我想将其转换为一组<li> HTML元素。我有这个工作没有问题。

但是现在,我想根据EL表达式拆分列表。因此EL表达式确定是否应该启动新的<ul>元素。我尝试了以下方法:

<s:fragment rendered="#{action.isNewList(index)}">
  <ul>
</s:fragment>
<!-- stuff that does the <li>'s goes here -->
<s:fragment rendered="#{action.isNewList(index)}">
  </ul>
</s:fragment>

但这是无效的,因为<ul>的嵌套是错误的。

我该怎么做?

4 个答案:

答案 0 :(得分:1)

你可以使用JSF <f:verbatim>标签来做到这一点,这个标签并不漂亮,但有效:

<f:verbatim rendered="#{action.isNewList(index)}">
  &lt;ul&gt;
</f:verbatim>
<!-- stuff that does the <li>'s goes here -->
<f:verbatim rendered="#{action.isNewList(index)}">
  &lt;/ul&gt;
</f:verbatim>

答案 1 :(得分:0)

我不熟悉Seam Framework,但如果我理解正确的问题,这样的事情可能有用。

<!-- before your loop, open your first <ul> if the (@Datamodel) is not empty -->

<s:fragment rendered="#{action.isNewList(index)}">
  </ul>
  <ul>
</s:fragment>
<!-- stuff that does the <li>'s goes here -->

<!-- after your loop, close your last </ul> if the (@Datamodel) is not empty -->

答案 2 :(得分:0)

我并不熟悉Seam,但是我在使用XSLT和其他基于XML的框架时看到了同样的问题。

通常有两种解决方案:

  1. 重新考虑您的页面和数据架构,以便根据单个条件编写整个列表。这可能需要在s:fragment内部循环。
  2. 将违规的无效片段html包裹在&lt;![CDATA [...]]&gt;

答案 3 :(得分:0)

你应该有这样的东西(我将使用伪代码):

<ul>
    <s:for items="itemList" ...>

      <s:fragment rendered="#{action.isNewList(index) && index > 0}">
        </ul>
        <ul>
      </s:fragment>
      <li>
        <!-- stuff that does the <li>'s goes here -->
      </li>

    </s:for>
</ul>