p:ajax功能在Liferay门户中不起作用

使用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>

豆角:

@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

我不知道我在做什么错,我在想什么.
任何帮助将不胜感激.

最佳答案
我已经解决了问题.有两个问题.第一个(不太严重的)是js回调被错误地调用.调用它们的正确方法应该如下:

<p:ajax process="@form" update="output" onstart="onStart()" oncomplete="onComplete()" onsuccess="onSuccess()" onerror="onError()" />

严重的问题与liferay-portlet.xml配置文件中缺少参数有关.
好吧,也许我应该开始说我正在处理一个Liferay Portlet,其中包含一个使用Primefaces的JSF Portlet.这都意味着需要liferay-portlet.xml配置文件.并且此配置文件必须包含以下参数:

<requires-namespaced-parameters>false</requires-namespaced-parameters>

问题是默认的liferay-portlet.xml文件(即eclipse IDE向导创建的文件)不会自动包含这样的参数.包含这样的参数后,所有操作均按预期进行.

(对在Liferay Faces Bridge项目中工作的Liferay人员投反对票).

更新:我创建Liferay插件项目的方式.

>新建>专案> Liferay插件项目

插件类型:Portlet

包括示例代码->未选中

创建项目后启动新的Portlet向导->检查
>下一步> JSF 2.x版
>下一步> Primefaces
>完成

显示向导的步骤:

> Portlet类:javax.portlet.faces.GenericFacesPortlet
>下一个
查看模板:Primefaces
>下一个
>完成

这些步骤之后的主要结果是文件liferay-portlet.xml没有元素:

<requires-namespaced-parameters>false</requires-namespaced-parameters>

开发设置:

>针对Web开发人员的Eclipse Java EE IDE
版本:Mars.2发行版(4.5.2)-内部版本:20160218-0600
> Liferay IDE 2.2.4.201507230603-ga5

任何澄清将不胜感激.

转载注明原文:p:ajax功能在Liferay门户中不起作用 - 代码日志