使用Liferay门户时,我无法使用PrimeFaces 6.1内置的ajax功能。我已经开始使用最初的用例示例,即PF用户指南文档中显示的示例,没有任何反应,绝对没有任何反应。
xhtml方
<h:form id="form">
<h:inputText value="#{bEntityTree.text}">
<p:ajax process="@form" update="output" onstart="onStart" oncomplete="onComplete" onsuccess="onSuccess" onerror="onError"/>
</h:inputText>
<br/>
<h:outputText id="output" value="valor:#{bEntityTree.text}"/>
</h:form>
Bean方面:
@ManagedBean(name = "bean")
@ViewScoped
public class Bean implements Serializable {
private static Logger logger = Logger.getLogger(BEntityTree.class);
private String text;
public Bean() {
logger.trace("bean created");
}
@PostConstruct
private void onPostConstruct() {
logger.trace("start");
}
public String getText() {
logger.trace("getting text:" + text);
return text;
}
public void setText(String text) {
logger.trace("setting text:" + text);
this.text = text;
}
}
JS方面:
function onStart(){
console.log("onStart");
}
function onComplete(){
console.log("onComplete");
}
function onSuccess(){
console.log("onSuccess");
}
function onError(){
console.log("onError");
}
根据文档所述,每次输入更改时,ajax请求都会发送到服务器。我的理解是,当'onchange'事件被触发时,输入会发生变化(默认的客户端事件)。好吧,每次我在<h:inputText>
元素中输入一个字符都没有任何反应。当<p:inputText>
失去焦点时,没有任何反应,即<h:outputText>
未更新,并且我的Chrome浏览器的控制台上显示任何跟踪控制台。我得到的唯一跟踪日志来自我的IDE控制台:
[TRACE] Bean:<init>():bean created
[TRACE] Bean:onPostConstruct():start
[TRACE] Bean:getText():getting text:null
[TRACE] Bean:getText():getting text:null
我不知道我做错了什么,我错过了什么。 任何帮助都会非常感激。
答案 0 :(得分:0)
我刚刚解决了问题。有2个问题。第一个(不太严重的一个)是js回调被错误地调用。调用它们的正确方法应如下:
<p:ajax process="@form" update="output" onstart="onStart()" oncomplete="onComplete()" onsuccess="onSuccess()" onerror="onError()" />
严重问题与liferay-portlet.xml
配置文件中缺少参数有关。
好吧,也许我应该开始说我正在处理一个包含使用Primefaces的JSF portlet的Liferay portlet。这一切都意味着需要liferay-portlet.xml
配置文件。此配置文件必须包含以下参数:
<requires-namespaced-parameters>false</requires-namespaced-parameters>
问题是默认的liferay-portlet.xml
文件,即eclipse IDE向导创建的文件,不会自动包含这样的参数。包含这样的参数后,它都按预期工作。
(对在Liferay Faces Bridge项目中工作的Liferay人员进行投票)。
更新:我创建Liferay插件项目的方式。
新&gt;项目&gt; Liferay插件项目
插件类型:portlet
包含示例代码 - &gt;未选中
在创建项目后启动新的Portlet向导 - &gt;检查
下一个&gt; JSF 2.x
显示向导时的步骤:
这些步骤之后的主要结果是文件liferay-portlet.xml
没有元素:
<requires-namespaced-parameters>false</requires-namespaced-parameters>
开发设置:
任何澄清都将不胜感激。