PrimeFaces 12动态创建InputMask失效,求无需 workaround的解决方案
解决方案
方法1:主动注册组件依赖资源
动态创建InputMask后,手动将其所需的JS/CSS资源注册到页面资源库,替代静态组件的自动资源注入逻辑:
// 创建InputMask组件后添加这段代码 FacesContext context = FacesContext.getCurrentInstance(); ResourceRegistry resourceRegistry = context.getApplication().getResourceHandler().getResourceRegistry(); // 注册InputMask核心脚本 resourceRegistry.registerResource(context, "primefaces", "inputmask/inputmask.js", "head", null, null, false); // 注册验证脚本(按需添加) resourceRegistry.registerResource(context, "primefaces", "validation/validation.js", "head", null, null, false); // 注册InputMask样式(若有需要) resourceRegistry.registerResource(context, "primefaces", "inputmask/inputmask.css", "head", null, null, false);
方法2:调用组件的资源添加方法
利用InputMask组件自带的addComponentResource方法,让组件自行处理资源注册:
InputMask inputNumber = (InputMask) application.createComponent(InputMask.COMPONENT_TYPE); // ... 组件配置代码(setMask、setId等) ... // 手动触发资源添加 inputNumber.addComponentResource(context, "inputmask/inputmask.js", "head"); inputNumber.addComponentResource(context, "validation/validation.js", "head");
问题根源
PrimeFaces静态组件(如xhtml中直接编写的<p:inputMask>)在渲染时会自动注入依赖的JS/CSS资源,但动态创建的组件不会触发这一逻辑。添加隐藏静态组件能生效,是因为它强制PrimeFaces加载了对应资源。上述方法就是直接模拟这一资源注入过程,主动把InputMask需要的资源添加到页面中。
内容的提问来源于stack exchange,提问作者Mahmoud Saleh
相关产品推荐
相关产品推荐

