jsf 2 - 访问 JSF 定制标记的标识



TL;DR有没有像composite的cc.clientId这样的东西可以给我自定义标记的id?

详细信息:我想要一个自定义标记,它将呈现一个标签、一个值和一个图标。当单击该图标时,应该会打开一个Bootstrap模态来编辑该值。

<ui:composition>
  <div> #{field.label}: #{field.value} 
    <a class="icon-pencil" data-target="#editForm" data-toggle="modal">
  </div>
  <h:form id="editForm" class="modal hide fade" role="dialog" ...>
    ... there's an input here linked to field.value ...
  </h:form>
</ui:composition>

我可以将标签与<my:editor />一起使用。当我在ui:repeat中执行此操作时,会在editForm中预先添加一个id,以便使用id j_idt104:editForm进行渲染。所以我需要修改数据目标以包括id。

使用复合组件会非常容易,因为我可以通过cc.clientId:访问id

data-target="##{cc.clientId}:editForm"

然而,我无法使用自定义标记,因为我不知道有哪个EL表达式(或其他什么(可以让我访问id。我可能会等到页面加载后,再使用jQuery检查id,并在之后设置数据目标,但我希望有一个更纯的JSF解决方案。

目前我使用的是JSF 2.1和Bootstrap 2.3。

答案似乎是否定的。BalusC说你应该用"普通"JSF组件替换自定义标签之类的东西。在这种情况下,这意味着使用复合组件。

如果你对使用自定义标签一筹莫展,我通过在表单的id:中使用索引来解决这个问题(这里的答案提供了很多帮助(

我用一个可以访问物品索引的c:forEach替换了ui:repeat

<table>
<c:forEach items="#{bean.items}" var="item" varStatus="status">
  <my:editor index="#{status.index}" ... />
</c:forEach>
</table>

在自定义标签中,我使用了data-target:中的索引

<tr>
  <td>#{label}: #{value}</td>
  <td>
    <a data-target="#editForm-#{index}" ... ></a>
    <h:form id="editForm-#{index}" ... >
      ...
    </h:form>
  </td>
</tr>

唯一的问题是c:forEach是一个构建时构造(请参阅本答案中的详细信息(,如果您需要任何渲染时数据(例如在preRenderView中构建信息(,这将是一个问题。如果这样做,那么最好使用带有自定义组件的ui:repeat,并依赖cc.clientId

相关内容

  • 没有找到相关文章