我正在尝试将这三个框架一起使用:PrimeFaces、PrimeFaces Mobile 和 MyFaces ExtVal。库版本为:PF 3.3.1、PF Mobile 0.9.3、MyFaces ExtVal 2.0.5。考虑以下代码:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui">
<f:view>
<h:head>
<meta charset="UTF-8" />
<title>Primefaces Mobile test</title>
</h:head>
<h:body>
<h:form>
<p:commandButton value="Oi" />
</h:form>
</h:body>
</f:view>
</html>
如果项目只有 PrimeFaces 和 Mobile jar,则呈现的 commandButton 符合预期:
<button id="j_idt6:j_idt7" name="j_idt6:j_idt7" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" onclick="PrimeFaces.ab({source:'j_idt6:j_idt7'});return false;" type="submit"><span class="ui-button-text">Oi</span></button>
这是默认的 PrimeFaces 渲染器。如果我将 f:view 配置为 renderKitId 作为 PRIMEFACES_MOBILE,则呈现的按钮是:
<button id="j_idt6:j_idt7" name="j_idt6:j_idt7" type="submit" data-iconpos="left" onclick="PrimeFaces.ab({source:'j_idt6:j_idt7'});return false;">Oi</button>
正如预期的那样,它也可以。现在,添加 MyFaces ExtVal 罐子,一切都会中断,只有 PRIMEFACES_MOBILE 是组件的渲染器。为了测试行为,我添加了 jar:myfaces-extval-bean-validation-2.0.5.jar、myfaces-extval-core-2.0.5.jar 和 myfaces-extval-property-validation-2.0.5.jar。然后我删除了 renderKitId,所以应该使用默认的 PrimeFaces 库,但结果还是:
<button id="j_idt6:j_idt7" name="j_idt6:j_idt7" type="submit" data-iconpos="left" onclick="PrimeFaces.ab({source:'j_idt6:j_idt7'});return false;">Oi</button>
我尝试将 f:view 中的 renderKitId 强制为 HTML_BASIC,但它一直在渲染 PrimeFaces Mobile 版本的 commandButton。
所以小伙伴们有什么建议吗?在定义 RenderKitId 之前,我的系统是好的,当我升级库时,我得到了这个错误。我在PrimeFaces 论坛上发帖,但我找不到解决方法,也看不出为什么会这样。