p:ajax功能在Liferay门户

时间:2017-09-13 11:30:43

标签: ajax jsf primefaces 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>

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

我不知道我做错了什么,我错过了什么。 任何帮助都会非常感激。

1 个答案:

答案 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插件项目的方式。

  1. 新&gt;项目&gt; Liferay插件项目

    插件类型:portlet

    包含示例代码 - &gt;未选中

    在创建项目后启动新的Portlet向导 - &gt;检查

  2. 下一个&gt; JSF 2.x

  3. 下一个&gt; Primefaces
  4. 完成
  5. 显示向导时的步骤:

    1. Portlet类:javax.portlet.faces.GenericFacesPortlet
    2. 接着 查看模板:Primefaces
    3. 下一步
    4. 完成
    5. 这些步骤之后的主要结果是文件liferay-portlet.xml没有元素:

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

      开发设置:

      • 适用于Web开发人员的Eclipse Java EE IDE 版本:Mars.2版本(4.5.2) - 构建ID:20160218-0600
      • Liferay IDE 2.2.4.201507230603-ga5

      任何澄清都将不胜感激。