本文介绍了< H:selectOneRadio>渲染表元素,如何避免这种情况?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 有没有办法告诉JSF在使用< h:selectOneRadio> < table> 元素code>? 我不使用表,在这种情况下它完全没有意义。Is there a way to tell JSF that it should NOT render a <table> element when using <h:selectOneRadio>?I don't use tables and it makes absolutely no sense in this case.任何帮助表示赞赏!推荐答案 JSF 2.3,组属性 按照 JSF规范问题329 我添加了一个新的组属性为< h:selectOneRadio> 这应该使这一切变得更加乏味。在父 UIForm 中具有相同组值的所有单选按钮组件将相互分组。如果select项具有非null 标签,除了单选按钮本身和可选标签之外,它们也不会呈现任何标记。如果有,标签会直接出现在单选按钮之后。JSF 2.3 with group attributeAs per JSF spec issue 329 I have added a new group attribute to <h:selectOneRadio> which should make this all much less tedious. All radio button components having the same group value within a parent UIForm will be grouped with each other. Also they won't render any markup besides the radio button itself and the optional label if the select item has a non-null label. If any, the label appears directly after the radio button.<!-- Just markup them the way you want! --><ul> <ui:repeat id="items" value="#{bean.items}" var="item"> <li> <h:selectOneRadio group="foo" value="#{bean.selectedItem}"> <f:selectItem itemValue="#{item}" /> </h:selectOneRadio> </li> </ui:repeat></ul>以下情况也是可能的。如果有多个组件具有相同的组,并且值属性和/或 UISelectItem 孩子缺席,然后它将引用该组的第一个组成部分。Following scenarios are also possible. When there are multiple components with same group, and the value attribute and/or UISelectItem child is absent, then it will reference those of the first component of the group.<h:selectOneRadio group="foo" value="#{bean.selectedItem}"> <f:selectItems value="#{bean.availableItems}" /></h:selectOneRadio><h:selectOneRadio group="foo" /><h:selectOneRadio group="foo" /><h:selectOneRadio group="foo" value="#{bean.selectedItem}"> <f:selectItem itemValue="one" /> <f:selectItem itemValue="two" /> <f:selectItem itemValue="three" /></h:selectOneRadio><h:selectOneRadio group="foo" /><h:selectOneRadio group="foo" /><h:selectOneRadio group="foo" value="#{bean.selectedItem}"> <f:selectItem itemValue="one" /></h:selectOneRadio><h:selectOneRadio group="foo"> <f:selectItem itemValue="two" /></h:selectOneRadio><h:selectOneRadio group="foo"> <f:selectItem itemValue="three" /></h:selectOneRadio><h:selectOneRadio group="foo" value="#{bean.selectedItem}"> <f:selectItem itemValue="one" /></h:selectOneRadio><h:selectOneRadio group="foo" value="#{otherBean.selectedItem}"> <f:selectItem itemValue="two" /></h:selectOneRadio><h:selectOneRadio group="foo" value="#{lastBean.selectedItem}"> <f:selectItem itemValue="three" /></h:selectOneRadio>它将按照2.3.0-m07在Mojarra中提供。It will be available in Mojarra as per 2.3.0-m07.如果您已使用JSF 2.2,请使用其新的 passthrough elements / attribtues 功能,您可以明确设置名称属性为passthrough属性。要在模型中设置提交的值,您只需要额外的< h:inputHidden> 。If you're on JSF 2.2 already, make use of its new passthrough elements/attribtues feature whereby you explicitly set the name attribute as a passthrough attribute. In order to set the submitted value in the model, you only need an additional <h:inputHidden>.<html xmlns="http://www.w3.org/1999/xhtml" xmlns:jsf="http://xmlns.jcp.org/jsf" xmlns:ui="http://xmlns.jcp.org/jsf/facelets" xmlns:a="http://xmlns.jcp.org/jsf/passthrough">...<!-- Just markup them the way you want! --><ul> <ui:repeat id="items" value="#{bean.items}" var="item"> <li> <input type="radio" jsf:id="item" a:name="#{hiddenItem.clientId}" value="#{item}" a:checked="#{item eq bean.selectedItem ? 'checked' : null}" /> <h:outputLabel for="item" value="#{item}" /> </li> </ui:repeat></ul><!-- This one won't display anything. --><h:inputHidden id="selectedItem" binding="#{hiddenItem}" value="#{bean.selectedItem}" rendered="#{facesContext.currentPhaseId.ordinal ne 6}" />深入的技术说明可以在这个博客中找到:自定义布局,其中h:selectOneRadio在JSF 2.2中。In depth technical explanation can be found in this blog: Custom layout with h:selectOneRadio in JSF 2.2.如果您碰巧使用 PrimeFaces ,那么你也可以使用 < p:selectOneRadio layout =custom> ,< p:radioButton> 。If you happen to use PrimeFaces, then you can also use <p:selectOneRadio layout="custom"> with <p:radioButton>.<html ... xmlns:p="http://primefaces.org/ui"><!-- This one won't display anything. --><p:selectOneRadio id="foo" value="#{bean.selectedFoo}" layout="custom"> <f:selectItems value="#{bean.availableFoos}" /></p:selectOneRadio><!-- Just markup them the way you want! --><ul> <li><p:radioButton for="foo" itemIndex="0" /></li> <li><p:radioButton for="foo" itemIndex="1" /></li> <li><p:radioButton for="foo" itemIndex="2" /></li></ul>您还可以遍历可用的项目,只需在查看构建时间:You can also loop over the available items, you only need to do it during view build time:<ul> <c:forEach items="#{bean.availableFoos}" varStatus="loop"> <li><p:radioButton for="foo" itemIndex="#{loop.index}" /></li> </c:forEach></ul> Tomahawk(JSF 1.x或2.x) 如果您还没有使用JSF 2.2,或者您不喜欢PrimeFaces UI,请抓住 Tomahawk's < t:selectOneRadio> ,它提供与< h:selectOneRadio> 相同的纯HTML输出,但支持 layout =spread属性,以便您可以通过 < t:radio> 您想要的方式。Tomahawk (JSF 1.x or 2.x)If you're not on JSF 2.2 yet or if you don't like PrimeFaces UI, grab Tomahawk's <t:selectOneRadio> which renders the same plain HTML output as <h:selectOneRadio>, but supports a layout="spread" attribute so that you can position the items by <t:radio> the way you want.例如<html ... xmlns:t="http://myfaces.apache.org/tomahawk"><!-- This one won't display anything. --><t:selectOneRadio id="foo" value="#{bean.selectedFoo}" layout="spread"> <f:selectItems value="#{bean.availableFoos}" /></t:selectOneRadio><!-- Just markup them the way you want! --><ul> <li><t:radio for="foo" index="0" /></li> <li><t:radio for="foo" index="1" /></li> <li><t:radio for="foo" index="2" /></li></ul> 自定义渲染器 提供自定义 Renderer 。这只是一点工作。从下面显示的第一个另请参见链接开始:Custom RendererSupply a custom Renderer. It's only a bit of work. Start at the first "See also" link shown below: 如何覆盖h:selectOneRadio渲染器? jsf-impl中的渲染器类在哪里? 是否可以使用JSF构建干净的CSS布局而不使用表? 渲染不带HTML表格的selectManyCheckboxHow to override h:selectOneRadio renderer? Where is the renderer class in jsf-impl?Is it possible to use JSF to build clean CSS layouts without using tables?Render selectManyCheckbox without HTML table 这篇关于< H:selectOneRadio>渲染表元素,如何避免这种情况?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 09-12 19:54