我正在使用带有JSF2.3的primefaces
这是我的依赖关系的方式
dependencies {
providedCompile 'javax.servlet:javax.servlet-api:4.0.0'
compile group: 'javax.faces', name: 'javax.faces-api', version: '2.3'
compile group: 'org.glassfish', name: 'javax.faces', version: '2.3.3'
compile 'javax.servlet:jstl:1.2'
compile 'org.jboss.weld.servlet:weld-servlet:2.4.5.Final'
compile group: 'org.primefaces', name: 'primefaces', version: '6.2'
}
我的jsf文件非常基本
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:f="http://xmlns.jcp.org/jsf/core">
<h:head>
</h:head>
<f:view>
<h:outputLabel value="Hello, world"/>
<h:form>
<p:selectOneMenu value="#{testView.chosen}"
style="width:200px">
<f:selectItem itemLabel="Select listing template"/>
<f:selectItems value="#{testView.list}"/>
<p:ajax event="change" process="@this" update="@all"/>
</p:selectOneMenu>
</h:form>
</f:view>
</html>
和我的viewScoped bean也
@Named
@ViewScoped
public class TestView implements Serializable {
String chosen;
List<String> list;
@PostConstruct
public void setup(){
list = new ArrayList<>();
list.add("alpha");
list.add("gamma");
list.add("bravo");
}
getter和setter是为了简单起见而省略的。
事情是我曾经使用(jsf 2.2,primefaces 6.1)并且一切正常。升级后(jsf 2.3,primefaces6.2),每当事件发生变化(触发更改选择时)都会出现问题
错误是
Uncaught TypeError: Cannot read property 'error' of null
at Object.<anonymous> (core.js.xhtml?ln=primefaces&v=6.2:3)
at i (jquery.js.xhtml?ln=primefaces&v=6.2:2)
at Object.fireWith [as resolveWith] (jquery.js.xhtml?ln=primefaces&v=6.2:2)
at A (jquery.js.xhtml?ln=primefaces&v=6.2:4)
at XMLHttpRequest.<anonymous> (jquery.js.xhtml?ln=primefaces&v=6.2:4)
jsf2.3和primefaces之间是否存在冲突javascript?
答案 0 :(得分:3)
AFAICS这是Mojarra的一个错误,我会在那里创建一个问题。 看起来组件资源在回发中是可用的(参见PrimeFaces HeadRenderer),但不知何故它们不会在head标签内的响应中呈现。
注意:这只会在update = @ all时发生,否则head-tag将不会被替换。实际上更新= @所有shoudl都不会被使用,只有真的真的非常必要。
答案 1 :(得分:0)
关于你的事实问题(这是错误的表述),
jsf2.3和primefaces之间是否存在冲突javascript?
答案是:
不,没有。自PrimeFaces展示以来 根据实际操作展示的底部“在Mojarra-2.3.2上运行PrimeFaces-6.2”:https://www.primefaces.org/showcase/
但是你的编辑建议(就像我在评论中发布的那样)你在实际运行的项目中有多个PF版本。
答案 2 :(得分:0)
我可以使用简化的标记在PrimeFaces 6.2和6.3-SNAPSHOT ShowCase上创建此问题。传递的内容中缺少primefaces核心javascript文件。在更新主体之后,全局primefaces变量是undefined / null。使用@form代替@all仍在使用。
(缩小)index.xhtml
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui" template="/WEB-INF/template.xhtml">
<ui:define name="body">
<h:form>
<p:commandButton value="BUTTON_TEXT" update="@all"
process="@none" />
</h:form>
</ui:define>
(缩小)template.xhtml
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<h:head />
<h:body>
<ui:insert name="body"></ui:insert>
</h:body>
</html>
堆栈跟踪:
VM47:1 Uncaught TypeError: Cannot read property 'cw' of null
at <anonymous>:1:12
at p (jquery.js.xhtml?ln=primefaces&v=6.2:2)
at Ja (jquery.js.xhtml?ln=primefaces&v=6.2:3)
at r.fn.init.append (jquery.js.xhtml?ln=primefaces&v=6.2:3)
at r.fn.init.<anonymous> (jquery.js.xhtml?ln=primefaces&v=6.2:3)
at T (jquery.js.xhtml?ln=primefaces&v=6.2:3)
at r.fn.init.html (jquery.js.xhtml?ln=primefaces&v=6.2:3)
at Object.updateBody (core.js.xhtml?ln=primefaces&v=6.2:3)
at Object.updateElement (core.js.xhtml?ln=primefaces&v=6.2:3)
at Object.doUpdate (core.js.xhtml?ln=primefaces&v=6.2:3)
答案 3 :(得分:0)
mojarra存在问题,因为当您要呈现“全部”时,它应该发送所有文件。
同时,这里提到了另一种解决方案: https://github.com/javaserverfaces/mojarra/issues/4354
您可以在装载了primeface之后执行以下脚本,以便可以更改PF渲染HEAD的方式:
https://github.com/javaserverfaces/mojarra/files/2626517/primefaces_replacehead_hack.js.txt
有了它,PF将不会替换头部,并且代码可能会继续起作用。
对我有用。