Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 如何抑制MyFaces控制台html警告?_Jsf 2_Facelets_Myfaces - Fatal编程技术网

Jsf 2 如何抑制MyFaces控制台html警告?

Jsf 2 如何抑制MyFaces控制台html警告?,jsf-2,facelets,myfaces,Jsf 2,Facelets,Myfaces,我们正准备很快将JSF2(MyFaceswithFaceletsPages)应用程序投入生产。目前,我们的控制台日志(WebSphereV8上的SystemOut.log)中充满了大量此类消息: [3/26/13 16:42:33:744 CDT] 00000031 HtmlImageRend W Component UIGraphic Form:errorIconSave has no attribute alt or attribute resolves to null. Path to

我们正准备很快将JSF2(MyFaceswithFaceletsPages)应用程序投入生产。目前,我们的控制台日志(WebSphereV8上的SystemOut.log)中充满了大量此类消息:

[3/26/13 16:42:33:744 CDT] 00000031 HtmlImageRend W   Component UIGraphic Form:errorIconSave has no attribute alt or attribute resolves to null. Path to component {Component-Path : [Class: javax.faces.component.UIViewRoot,ViewId: /view/groupagreement/products/volumebased/VolumeBasedProducts.xhtml][Class: javax.faces.component.html.HtmlBody,Id: commonLayoutId][Class: javax.faces.component.html.HtmlPanelGrid,Id: j_id1364021679_785179b][Class: javax.faces.component.html.HtmlForm,Id: Form][Class: javax.faces.component.html.HtmlBody,Id: j_id363369746_1d362e8b][Class: javax.faces.component.html.HtmlPanelGrid,Id: j_id363369746_1d362e61][Class: org.richfaces.component.UIRegion,Id: j_id363369746_1d362e4a][Class: org.richfaces.component.UIPopupPanel,Id: confirmationPopUpForWayFinder][Class: javax.faces.component.html.HtmlPanelGrid,Id: j_id363369746_1d362ffd][Class: javax.faces.component.html.HtmlPanelGrid,Id: j_id363369746_1d362fbc][Class: javax.faces.component.html.HtmlPanelGrid,Id: j_id363369746_1d362f9a][Class: javax.faces.component.html.HtmlPanelGrid,Id: j_id363369746_1d362f70][Class: javax.faces.component.html.HtmlGraphicImage,Id: errorIconSave]}
[3/26/13 16:42:33:746 CDT] 00000031 HtmlResponseW W   HTML nesting warning on closing div: element td rendered by component : {Component-Path : [Class: javax.faces.component.UIViewRoot,ViewId: /view/groupagreement/products/volumebased/VolumeBasedProducts.xhtml][Class: javax.faces.component.html.HtmlBody,Id: commonLayoutId][Class: javax.faces.component.html.HtmlPanelGrid,Id: j_id1364021679_785179b]} not explicitly closed
我们认为这种过度的日志记录可能会影响性能。虽然我们知道我们应该将应用程序正确地编码为html规范,但它是由一家海外供应商交付的,我们对代码的质量没有我们想要的那么多控制。此时,我们可能没有时间修复所有xhtml文件(向图像添加alt属性等)


有没有办法禁用此日志记录?例如,web.xml上下文参数?我在MyFaces文档中找不到任何东西。

我自己能够解决这个问题

我查看了生成这些警告()的MyFaces组件的源代码。从源头上看,很明显在打印这些警告之前没有检查其他配置参数。当然,我们正在检查java.util.logging级别。因此,解决方案只是配置java.util.logging(也称为jul或jdk logging)以抑制来自这些组件的警告

我本可以尝试在我们的WebSphere实例中配置jdk日志记录配置文件,但在我们的生产环境(共享基础设施、锁定的服务器)中部署和管理这一更改要困难得多。因此,我最终使用了一个java解决方案—一个我注册为Springbean的类,它的init方法更改了它提供的记录器名称的日志级别:

<bean id="setJdkLoggingToSevere" class="ca.mycompany.myapp.util.JdkLoggingLevelConfigurer" init-method="init">
    <property name="level" value="SEVERE" />
    <property name="loggerNames">
        <list>
            <value>org.apache.myfaces.shared.renderkit.html.HtmlResponseWriterImpl</value>
            <value>org.apache.myfaces.renderkit.html.HtmlImageRenderer</value>
            <value>org.apache.myfaces.renderkit.html.ext.HtmlImageRenderer</value>
            <value>org.apache.myfaces.shared.renderkit.html.HtmlImageRendererBase</value>
            <value>org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlImageRendererBase</value>
            <value>org.apache.myfaces.renderkit.html.HtmlLabelRenderer</value>
            <value>org.apache.myfaces.renderkit.html.HtmlGridRenderer</value>
            <value>org.apache.myfaces.renderkit.html.ext.HtmlGridRenderer</value>
            <value>org.apache.myfaces.shared.renderkit.html.HtmlGridRendererBase</value>
            <value>org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlGridRendererBase</value>
            <value>org.apache.myfaces.shared.renderkit.html.HtmlRendererUtils</value>
            <value>org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlRendererUtils</value>
        </list>
    </property>
</bean>

在上述情况下,我们不再看到警告消息。如果我遗漏了任何发出警告的myfaces组件(我最初确实遗漏了一些),它们可以很容易地添加到spring配置中。

在HtmlImageRenderBase中,使用了JUL记录器,因此只需将文件logging.properties添加到类路径中,包括以下行:

org.apache.myfaces.shared.renderkit.html.HtmlImageRendererBase.level = SEVERE

我应该注意到,我们使用的是带有log4j实现的slf4j。为了控制MyFaces日志记录,我们是否需要根据中的一些答案将java.util.logging重定向到slf4j?进一步调查,似乎slf4j的jul-To-slf4j桥不是我们想要的,因为即使日志记录语句被关闭,它也会影响性能。(请参阅)在共享服务器上,“向类路径添加文件”不一定像听起来那么简单。将该文件包含在我的WAR的WEB-INF/classes目录中是否有效?如果是这样,这将不会与服务器上的其他应用程序发生冲突,这将是一个很好的解决方案。(当然,我需要在logging.properties中添加几行内容——根据下面的解决方案,需要添加许多渲染器类。)好的,理解:在我的环境中,在WEB-INF/classes中将此项添加到logging.properties就足够了,但我无法判断这是否适用于共享服务器。
org.apache.myfaces.shared.renderkit.html.HtmlImageRendererBase.level = SEVERE