使用PrimeFaces + PrimeFaces Mobile + MyFaces ExtVal渲染问题

时间:2012-07-26 18:20:16

标签: jsf primefaces myfaces omnifaces

我正在尝试使用三个框架: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渲染器。如果我使用renderKitId将f:view配置为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 jar,一切都中断,只有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,但它一直在渲染commandButton的PrimeFaces Mobile版本。

那么伙计们,你们有什么建议吗?在定义RenderKitId之前,我的系统还可以,当我升级库时,我收到了这个错误。我发布了PrimeFaces forum,但我找不到解决方法,我不明白为什么会这样。

2 个答案:

答案 0 :(得分:1)

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

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

我要感谢@Howard自去年以来的支持,以及MyFaces EXTVAL团队的解决方案。问候。

答案 1 :(得分:0)

@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,这可能会为您解决此问题。