【发布时间】:2016-01-07 08:59:39
【问题描述】:
我面临以下问题:
Primefaces remoteCommand 没有执行,它是否取决于我的 portlet 的生命周期?
<h:form id="controllayer">
.
.
.
<p:remoteCommand name="updatePageId" actionListener="#{formView.updatePageId}" />
</h:form>
<script>
var pageID;
Liferay.on('eventFire', function(event)
{
console.log("Recieved");
console.log(event.name);
pageID = event.name;
update();
});
function update() {
console.log("Recieved PageID: " + pageID);
updatePageId({newPageId: pageID});
}
</script>
我也试过不带参数,但即使这样也不行。
@SessionScoped
@ManagedBean(name="formView")
public class MainViewBean implements PagesUploadCallback, PageUploadCallback, PageActionCallback, Serializable
{
.
.
.
public void updatePageId()
{
LOG.info("Update Page ID");
String pageIdString = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("newPageId");
long pageId = Long.valueOf(pageIdString);
LOG.debug("Setting Page: " + pageId);
pageService.setActivePage(pageId);
}
.
.
.
}
我的 JavaCode 永远不会被调用。
【问题讨论】:
-
“它依赖于我的 portlet 的生命周期吗?” 不知道,在普通的 servlet 容器中尝试 minimal reproducible example
-
我认为JS方法名
update应该和<p:remoteCommand>的值(updatePageId)匹配。您可以将updatePageId()创建为 JavaScript 方法,并将actionListener更改为updatePageIdBean之类的其他名称以区分两者,这可能会导致问题! -
@Erythrozyt,我尝试了您的代码,一切正常。
Recieved或Recieved pageID:是否出现在 JS 控制台中?你有任何javascript错误吗?什么代码触发'eventFire'事件? 注意:我通过这个p:commandButton:<p:commandButton type="button" value="fire" onclick="Liferay.fire('eventFire');" />触发了这个事件 -
h:form 中是否还有其他可能无效并阻止 actionListener 的输入?是否曾经调用过 update() 脚本? JavaScript 控制台中的任何错误?另请参阅此进行其他分析:commandButton/commandLink/ajax action/listener method not invoked or input value not set/updated
标签: jsf primefaces liferay