簡體   English   中英

JSF中帶有Ajax請求的error @ malformedXML

[英]error@malformedXML with ajax requests in JSF

上下文:Weblogic 12.2.1 / JSF 2.1.6 / Richfaces 4.2.2 / Primefaces 3.4

我有一個在Weblogic 10.3.6上的JSF應用程序,並且已成功在Weblogic 12.2.1上進行了部署。

在每個ajax請求之后,我都面臨以下錯誤:

Received 'error@malformedXML' event from <input ...
[200] undefined: undefined

當頁面中不存在要渲染的組件時,通常會發生此錯誤,但是您將在以下代碼段中看到,情況並非如此:

爪哇

private int count = 0;

public void commandButton() {
    System.out.println("Click");
    count++;
}

public int getCount() {
    return count;
}

public void setCount(int count) {
    this.count = count;
}

HTML


JSF與Ajax

<h:form>
    <h:commandButton value="JSF with ajax">
        <f:ajax listener="#{myBean.commandButton}" render="count1" />
    </h:commandButton>
    <h:outputText id="count1" value="#{myBean.count}" />
</h:form>

單擊此按鈕可以正確執行myBean.commandButton,但隨后會產生以下所述的錯誤並刷新頁面。


豐富的面孔

<h:form>
    <a4j:commandButton value="Richfaces" action="#{myBean.commandButton}" render="count2" />
    <h:outputText id="count2" value="#{myBean.count}" />
</h:form>

單擊此按鈕可以正確執行myBean.commandButton,但隨后會產生以下所述的錯誤並刷新頁面。


Primefaces

<h:form>
    <p:commandButton value="Primefaces" action="#{myBean.commandButton}" update="count3" />
    <h:outputText id="count3" value="#{myBean.count}" />
</h:form>

單擊此按鈕可以正確執行myBean.commandButton並使用增加的值呈現輸出文本。


編輯1:

為了在Weblogic 12.2.1上進行部署,我不得不強制Weblogic通過此處提到的weblogic-application.xml使用給定的JSF 2.1.6包,例如:

<prefer-application-packages>
    <package-name>javax.faces.*</package-name>
    <package-name>com.sun.faces.*</package-name>
    <package-name>com.bea.faces.*</package-name>
</prefer-application-packages>

<prefer-application-resources> 
    <resource-name>javax.faces.*</resource-name> 
    <resource-name>com.sun.faces.*</resource-name> 
    <resource-name>com.bea.faces.*</resource-name> 
    <resource-name>META-INF/services/javax.servlet.ServletContainerInitializer</resource-name>
    <resource-name>META-INF/services/com.sun.faces.spi.FacesConfigResourceProvider</resource-name>
    <resource-name>META-INF/resources/javax.faces/jsf.js</resource-name>
</prefer-application-resources>

我非常確定JSF軟件包不會沖突,因為FacesContext.class.getPackage().getImplementationVersion()返回2.1.6-SNAPSHOT ,而wls-cat工具返回以下沖突的軟件包列表,並且JSF的軟件包不在其中。

但是我注意到,即使我強制Weblogic使用我的JSF包中的META-INF/resources/javax.faces/jsf.js ,它實際上也使用了Weblogic的JSF包中的jsf.js文件: Web瀏覽器jsf.js

沖突的包裹清單:

com.google.common.*
com.sun.mail.*
javax.el.*
javax.mail.*
javax.mail.event.*
javax.mail.internet.*
javax.mail.search.*
javax.mail.util.*
javax.persistence.*
javax.persistence.spi.*
javax.servlet.*
javax.servlet.http.*
javax.servlet.jsp.*
javax.transaction.*
javax.transaction.xa.*
javax.validation.*
javax.validation.bootstrap.*
javax.validation.constraints.*
javax.validation.groups.*
javax.validation.metadata.*
javax.validation.spi.*
net.jcip.annotations.*
net.sf.cglib.*
oracle.core.lmx.*
oracle.core.lvf.*
oracle.jdbc.*
oracle.jdbc.connector.*
oracle.jdbc.driver.*
oracle.jdbc.internal.*
oracle.jdbc.oci.*
oracle.jdbc.oracore.*
oracle.jdbc.pool.*
oracle.jdbc.rowset.*
oracle.jdbc.util.*
oracle.jdbc.xa.*
oracle.jpub.runtime.*
oracle.net.ano.*
oracle.net.jndi.*
oracle.net.ns.*
oracle.net.nt.*
oracle.net.resolver.*
oracle.security.o3logon.*
oracle.sql.*
oracle.sql.converter.*
org.aopalliance.aop.*
org.aopalliance.intercept.*
org.apache.commons.*
org.apache.oro.*
org.apache.xerces.*
org.apache.xmlbeans.*
org.bouncycastle.*
org.bouncycastle.asn1.*
org.bouncycastle.crypto.*
org.bouncycastle.i18n.*
org.bouncycastle.jce.*
org.bouncycastle.math.*
org.bouncycastle.ocsp.*
org.bouncycastle.util.*
org.bouncycastle.x509.*
org.slf4j.*
org.slf4j.helpers.*
org.slf4j.spi.*
org.w3c.dom.*
repackage.*
schemaorg_apache_xmlbeans.system.sXMLCONFIG.*
schemaorg_apache_xmlbeans.system.sXMLLANG.*
schemaorg_apache_xmlbeans.system.sXMLSCHEMA.*
schemaorg_apache_xmlbeans.system.sXMLTOOLS.*

有誰知道這個問題嗎?
提前致謝。

我終於解決了問題:
serveur發送的實際文件不是META-INF/resources/javax.faces/jsf.js而是META-INF/resources/javax.faces/jsf-uncompressed.js

因此, weblogic-application.xml文件必須具有以下配置:

<prefer-application-packages>
    <package-name>javax.faces.*</package-name>
    <package-name>com.sun.faces.*</package-name>
</prefer-application-packages>

<prefer-application-resources> 
    <resource-name>javax.faces.*</resource-name>
    <resource-name>com.sun.faces.*</resource-name>
    <resource-name>META-INF/services/javax.servlet.ServletContainerInitializer</resource-name>
    <resource-name>META-INF/services/com.sun.faces.spi.FacesConfigResourceProvider</resource-name>
    <resource-name>META-INF/resources/javax.faces/jsf.js</resource-name>
    <resource-name>META-INF/resources/javax.faces/jsf-uncompressed.js</resource-name>
</prefer-application-resources>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM