如何有条件地呈现像<div> s这样的纯HTML元素?

Ion*_*nut 27 html jsf-2 conditional-rendering

我正在尝试实现一个复合组件,该组件以纯文本显示用户的信息详细信息,或者如果所需的详细信息是当前连接的用户的详细信息,则通过可编辑的输入文本字段显示它们.

我知道al UI Components可以通过渲染属性渲染,但是那些不是UI组件的东西(例如div)

<div class = "userDetails" rendered = "#{cc.attrs.value.id != sessionController.authUser.id}">
    Name: #{cc.attrs.value.name}
    Details: #{cc.attrs.value.details}
</div>

<div class = "userDetails" rendered = "#{cc.attrs.value.id == sessionController.authUser.id}">
    <h:form>
        ...
    </h:form>
</div>
Run Code Online (Sandbox Code Playgroud)

我知道div没有渲染属性,可能我根本没有采用正确的方法.我可以很容易地使用JSTL标签,但我想避免这种情况.

Bal*_*usC 58

右JSF组件表示一个HTML <div>元素是<h:panelGroup>layout设置为属性block.所以,这应该做:

<h:panelGroup layout="block" ... rendered="#{someCondition}">
    ...
</h:panelGroup>
Run Code Online (Sandbox Code Playgroud)

或者,将其包裹在<ui:fragment>:

<ui:fragment rendered="#{someCondition}">
    <div>
        ...
    </div>
</ui:fragment>
Run Code Online (Sandbox Code Playgroud)

请注意,当您想要ajax更新有条件渲染的组件时,您应该更新其父组件的ajax.

也可以看看:


小智 10

自JSF 2.2以来,这很容易.通过使用传递元素,可以将任何HTML元素转换为具有呈现属性的JSF组件.

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:jsf="http://xmlns.jcp.org/jsf">
    <div class="userDetails" jsf:rendered="#{cc.attrs.value.id != sessionController.authUser.id}">
        Name: #{cc.attrs.value.name}
        Details: #{cc.attrs.value.details}
    </div>
</html>
Run Code Online (Sandbox Code Playgroud)

欲了解更多信息,访问https://jsflive.wordpress.com/2013/08/08/jsf22-html5/#elements


DRC*_*RCB 8

我只想用你的HTML包装 <h:panelGroup>

<h:panelGroup rendered = "#{cc.attrs.value.id != sessionController.authUser.id}">
    <div class = "userDetails">
        Name: #{cc.attrs.value.name}
        Details: #{cc.attrs.value.details}
    </div>
</h:panelGroup>

<h:panelGroup  rendered = "#{cc.attrs.value.id == sessionController.authUser.id}">
    <div class = "userDetails">
        <h:form>
           ...
        </h:form>
    </div>
</h:panelGroup>
Run Code Online (Sandbox Code Playgroud)

另一种选择是使用Seam(<s:div>)或Tomahawk(<t:htmlTag>)库中的组件(如果您已在项目中使用它们).

请参阅:http://www.jsftoolbox.com/documentation/seam/09-TagReference/seam-div.html

<s:div styleClass = "userDetails" rendered = "#{cc.attrs.value.id != sessionController.authUser.id}">
    Name: #{cc.attrs.value.name}
    Details: #{cc.attrs.value.details}
</s:div>

<s:div styleClass = "userDetails" rendered = "#{cc.attrs.value.id == sessionController.authUser.id}">
    <h:form>
        ...
    </h:form>
</s:div>
Run Code Online (Sandbox Code Playgroud)

或者:http://myfaces.apache.org/tomahawk-project/tomahawk12/tagdoc/t_htmlTag.html

<t:htmlTag value="div" styleClass = "userDetails" rendered = "#{cc.attrs.value.id != sessionController.authUser.id}">
    Name: #{cc.attrs.value.name}
    Details: #{cc.attrs.value.details}
</t:htmlTag>

<t:htmlTag value="div" styleClass = "userDetails" rendered = "#{cc.attrs.value.id == sessionController.authUser.id}">
    <h:form>
        ...
    </h:form>
</t:htmlTag>
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

57319 次

最近记录:

10 年,1 月 前