微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

<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>

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

解决方法

正确的JSF组件来表示HTML< div>元素是< h:panelGroup>将layout属性设置为block.所以,这应该做:
<h:panelGroup layout="block" ... rendered="#{someCondition}">
    ...
</h:panelGroup>

或者,将其包装在< ui:fragment&gt ;::::

<ui:fragment rendered="#{someCondition}">
    <div>
        ...
    </div>
</ui:fragment>

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

也可以看看:

> Alternative to ui:fragment in JSF
> Conditional rendering of non-JSF components (plain vanilla HTML and template text)
> Ajax update/render does not work on a component which has rendered attribute
> Why do I need to nest a component with rendered=”#{some}” in another component when I want to ajax-update it?

原文地址:https://www.jb51.cc/html/231178.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐