gpt4 book ai didi

jsf - 如何覆盖 h :selectOneRadio renderer? jsf-impl 中的渲染器类在哪里?

转载 作者:行者123 更新时间:2023-12-05 01:07:34 27 4
gpt4 key购买 nike

是否可以覆盖 <h:selectOneRadio> 使用的渲染器?我试图从 JSF 2.2 的 jsf-impl 包中找到该类,但没有找到。我想这样做的原因是摆脱它生成的表。

最佳答案

Is it possible to override renderer used by h:selectOneRadio?


是的,确实如此。否则,像 PrimeFaces 这样的 UI 组件库将不存在。

I tried to find the class from jsf-impl package but didn't find it.


确切的类取决于您使用的 JSF 实现。如果是 Mojarra,则是 com.sun.faces.renderkit.html_basic.RadioRenderer 类(class)。如果是 MyFaces,则是 org.apache.myfaces.renderkit.html.HtmlRadioRenderer 类(class)。
为了正确覆盖它,只需在必要时扩展类和覆盖方法,并在您的 faces-config.xml 中按如下方式注册它。 :
<render-kit>
<renderer>
<component-family>javax.faces.SelectOne</component-family>
<renderer-type>javax.faces.Radio</renderer-type>
<renderer-class>com.example.MyRadioRenderer</renderer-class>
</renderer>
</render-kit>
请记住,您通过这种方式将渲染器与特定的 JSF impl/version 紧密耦合。这种扩展的渲染器与不同的 JSF 实现不兼容(即,当您用 MyFaces 替换 Mojarra 时,您的应用程序不会部署),并且可能会在当前 JSF 实现更新到更新版本时中断。如果您担心这一点,请考虑完全从头开始编写渲染器,例如 PrimeFaces 等。做。

The reason I want to do this is to get rid of the table it generates.


考虑查看 TomahawkPrimeFaces而不是重新发明轮子。他们分别有一个 <t:selectOneRadio layout="spread"><t:radio> <p:selectOneRadio layout="custom"><p:radioButton> 这允许您将这些东西放置在您想要的任何位置。
也可以看看:
  • <h:selectOneRadio> renders table element, how to avoid this?
  • 关于jsf - 如何覆盖 h :selectOneRadio renderer? jsf-impl 中的渲染器类在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18389352/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com