【问题标题】:Rendering problems with PrimeFaces + PrimeFaces Mobile + MyFaces ExtValPrimeFaces + PrimeFaces Mobile + MyFaces ExtVal 的渲染问题
【发布时间】:2012-07-26 18:20:16
【问题描述】:

我正在尝试将这三个框架一起使用: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 是组件的渲染器。为了测试行为,我添加了 jars: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 forum 发帖,但我找不到解决方法,也看不出为什么会这样。

【问题讨论】:

    标签: jsf primefaces myfaces omnifaces


    【解决方案1】:

    对于那些遇到与我相同的错误的人,此问题特定于 MyFaces EXTVAL 使用渲染套件 ID 的方式。今天,在@Howard 的帮助下,我看到了 EXTVAL 人员提供的解决问题的新方法。

    要查看更多信息: https://issues.apache.org/jira/browse/EXTVAL-151 http://forum.primefaces.org/viewtopic.php?p=90933#p90933

    我要感谢 @Howard 自去年以来的支持,以及 MyFaces EXTVAL 团队的修复。问候。

    【讨论】:

      【解决方案2】:

      @Fernando,我刚刚报告了一个与 OmniFaces、MyFaces JAR 和 PrimeFaces Mobile JAR 类似的问题。 OmniFaces 修复了它,并说如下:

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

      已修复:view source code

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

      【讨论】:

      • 我尝试了omnifaces-1.3-SNAPSHOT-20121106.jar,但我得到了相同的行为。实际上问题在于没有特定的错误。真正发生的是移动渲染套件设置为默认值,忽略所需渲染套件的任何配置。在我的stackoverflow问题中,我提出了一些重现的步骤,我只是用commandButton创建了一个简单的视图,看到tomcat日志,什么也没发生,只是渲染的组件不是HTML_BASIC的。确切的问题在于 MyFaces Extval 库,如果我只是删除他们的罐子,一切都会按预期工作。
      • 最好为此添加一个 MyFaces jira,但我确信 OmniFaces 可以在他们的库中添加一个实用程序来解决这个问题。哦,我忘了要求您将启用可恢复视图组件添加到显示此行为的页面,但您必须遵循我在 omnifaces 问题 88 中列出的测试步骤。仍然最好将功能请求添加到 omnifaces 问题跟踪器以解决此问题问题,如果 MyFaces jira 没有得到修复。
      猜你喜欢
      • 1970-01-01
      • 2012-07-04
      • 1970-01-01
      • 1970-01-01
      • 2017-08-10
      • 2017-01-01
      • 2011-06-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多