PrimeFaces 8以下resolveWidgetVar使用及CommandButton渲染器适配问题
1、PrimeFaces 8以下版本resolveWidgetVar的使用方法
PrimeFaces 6.1版本未提供Renderer类内置的resolveWidgetVar方法,直接调用官方工具类的静态方法即可实现同等效果:
- 引入依赖包:
import org.primefaces.util.ComponentUtils; - 调用代码:
String widgetVar = ComponentUtils.resolveWidgetVar(context, button);
该方法逻辑与PrimeFaces 8+版本Renderer内置的resolveWidgetVar完全一致,可直接替换原有代码中的对应调用。
2、commandButton需要配置的属性
- 必填属性:
disableOnClick="true",只有配置该属性后,自定义Renderer才会注入防重复点击的JS逻辑,否则走默认渲染逻辑 - 可选属性:如需自定义按钮禁用后的展示文本,可配置
disabledText="处理中...",Renderer会自动读取该值替换按钮点击后的展示内容 - 原有常规属性
action、actionListener、styleClass等不受影响,可按业务需求正常配置
3、xhtml中调用CommandButtonSingleClickRenderer的步骤
- 先完成Renderer全局注册:在项目
WEB-INF/faces-config.xml中新增如下配置,将自定义Renderer绑定到原生p:commandButton组件:
<render-kit> <renderer> <component-family>org.primefaces.component</component-family> <renderer-type>org.primefaces.component.CommandButtonRenderer</renderer-type> <renderer-class>你的自定义类全限定名.CommandButtonSingleClickRenderer</renderer-class> </renderer> </render-kit>
- xhtml页面无需特殊适配,正常使用
<p:commandButton>标签即可,只要标签配置了disableOnClick="true"属性,就会自动触发自定义Renderer的防重复点击逻辑。
补充优化建议:针对你遇到的
getAttributeValue返回null的问题,可在该方法中增加默认值兜底逻辑,避免手动加空校验的冗余代码:@Override protected String getAttributeValue(final FacesContext context, final CommandButton button, final String attribute) { String value = super.getAttributeValue(context, button, attribute); return value == null ? "" : value; }
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

