1

我正在尝试将这三个框架一起使用: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 论坛上发帖,但我找不到解决方法,也看不出为什么会这样。

4

2 回答 2

1

对于那些遇到与我相同的错误的人,此问题特定于 MyFaces EXTVAL 使用 renderkit id 的方式。今天,在@Howard 的帮助下,我看到了 EXTVAL 人员的一个新修复,它解决了这个问题。

To see more information: https://issues.apache.org/jira/browse/EXTVAL-151 http://forum.primefaces.org/viewtopic.php?p=90933#p90933

I would like to thank @Howard for the support since last year, and the MyFaces EXTVAL team for the fix. Regards.

于 2013-02-21T16:49:19.270 回答
0

@Fernando,我刚刚报告了我在使用 OmniFaces、MyFaces JAR 和 PrimeFaces Mobile JAR 时遇到的类似问题。OmniFaces 修复了它,并说如下:

项目成员 balusc 的评论 4,今天(4 小时前)在 MyFaces 中,渲染工具包 ID 在构建视图期间设置(在 Mojarra 中,在创建视图期间设置)。因此临时视图没有正确的渲染工具包 ID。

已修复:查看源代码

这“可能”也可以解决您的问题。它在 OmniFaces 1.3 中可用。将 JAR 添加到您的类路径中,重新测试并回复测试结果。我认为您没有必要对 web.xml 或 faces-config.xml 进行任何更改。如果我没记错的话,OmniFaces 有一个名为 OmniPartialView(Context) 的 PartialViewContext,但您可能需要将 OmniFaces 的 FullAjaxExceptionHandler 添加到 faces-config.xml,这可能会为您解决这个问题。

于 2012-11-07T05:24:58.720 回答