问题
I\'m trying to conditionally render a <tr> therefore I cannot use <h:panelGroup> as it will render to <span> or <div>
My current (working) approach is the following:
<h:outputFormat rendered=\"#{negotiator.maySend}\">
<tr> my tr stuff </tr>
</h:outputFormat>
This works, but I\'m not sure if that\'s the way to abuse <h:outputFormat> - before that I used <h:outputLabel> but this was rendered to <label> in IE.
I have also read the answers to this question, but as mentioned above, they won\'t work for me because of the <tr>: How to not render whole block in JSF?
回答1:
I cannot use
<h:panelGroup>as it will render to<span>or<div>
Apparently you didn't test it carefully. The <h:panelGroup> won't render anything if you don't specify attributes which should end up in the client side, like layout, id, styleClass, etc.
Thus, this should technically perfectly work fine.
<h:panelGroup rendered="#{negotiator.maySend}">
<tr> my tr stuff </tr>
</h:panelGroup>
However, better for the main purpose would be to use <ui:fragment>.
<ui:fragment rendered="#{negotiator.maySend}">
<tr> my tr stuff </tr>
</ui:fragment>
This is by the way also possible with <f:verbatim>, but this is deprecated since JSF 2.0 as it's designed specifically for usage in JSP.
See also:
- Alternative to ui:fragment in JSF
- Conditionally displaying JSF components
- How to find out client ID of component for ajax update/render? Cannot find component with expression "foo" referenced from "bar"
- Ajax update/render does not work on a component which has rendered attribute
来源:https://stackoverflow.com/questions/15946985/conditional-rendering-of-non-jsf-components-plain-vanilla-html-and-template-tex