0

在我的 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>

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

我该怎么做?

4

4 回答 4

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>
于 2009-01-28T13:51:19.460 回答
0

我不熟悉 Seam 框架,但如果我正确理解了这个问题,这样的事情可能会奏效。

<!-- 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 -->
于 2009-01-27T15:48:52.437 回答
0

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

一般有两种解决方案:

  1. 重新考虑您的页面和数据架构,以便根据单个条件编写整个列表。这可能需要 s:fragment 内的循环。
  2. 将有问题的无效片段 html 包装在 <![CDATA[ ... ]]> 中
于 2009-01-27T15:56:43.513 回答
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>
于 2009-01-27T22:20:07.747 回答