首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSF & Primefaces - RemoteCommand不能正常工作

JSF & Primefaces - RemoteCommand不能正常工作
EN

Stack Overflow用户
提问于 2014-02-21 18:15:53
回答 2查看 13.2K关注 0票数 2

我试图在我的应用程序中实现primefaces的RemoteCommand标记,但不知怎么的,它并不像文档所说的那样工作。

我想要实现的东西:我有几个具有不同布局的页面,但它们都使用相同的模板。(基本上模板的内容发生了变化)。但是,不同的页面应该一个接一个地、一个接一个地自动加载,间隔在彼此之间。

代码语言:javascript
复制
<p:remoteCommand name="remoteSwitchPage" actionListener="#{circuitBean.redirect()}" autoRun="false"/>

这是我的JSF代码,should为我提供了一个名为remoteSwitchPage()的JavaScript方法,但没有!也应该运行not,因为我已经说过autoRun="false",但是在加载时运行!在调用方法remoteSwitchPage()之后,它应该通过Java呈现另一个页面(这个实际上有效)。不管怎么说,JSF在去掉括号时都找不到重定向方法,这就是为什么我把它们放在这里的原因)。

总结如下:

  1. JavaScript不为我提供remoteSwitchPage()
  2. remoteCommand运行在页面加载上,它将其should not!
  3. 当去掉括号时,JSF将找不到我的ManagedBean方法resize()

你们知道我在这里做错了什么吗?

我用的是primefaces 4.0JSF 2.1

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-22 00:51:48

解决了

就像Simegos邮报的评论中所说的那样。

我创建了一个隐藏按钮,它每隔X秒由JavaScript点击一次。单击按钮后呈现的每个页面都需要实现以下代码。理想的做法是将代码放在一个模板中,所有呈现的页面都将实现该模板。

代码语言:javascript
复制
<h:form id="form" class="hidden"> --> Hidden button
    <h:commandButton id="switchPageButton" action="#{circuitBean.renderNextScreen()}"/>
</h:form>    
<h:outputScript>
    $(function() {
        $(".hidden").each(function() { --> Declare Form as hidden, since it becomes overwritten by JSF
            $(this).css("display","none");
        });
        var switchPageLink = $("#form\\:switchPageButton"); --> Get Button via ID
        window.setInterval(function() {
            switchPageLink.click(); --> Click it 
        }, #{circuitBean.pageInterval}); --> after X seconds. I'm reading the interval through the bean here. You can just put a number in there
    });
</h:outputScript> 
票数 1
EN

Stack Overflow用户

发布于 2014-02-21 18:28:28

如果你使用:

代码语言:javascript
复制
<p:remoteCommand name="remoteSwitchPage" actionListener="#{circuitBean.redirect}" />

JSF将试图找到getRedirect,这就是为什么您应该使用circuitBean.redirect()

编辑:我认为您应该使用action而不是actionListener

下面是我的示例代码(测试):

HTML:

代码语言:javascript
复制
<a href="#" onclick="logoutAccount()"><i class="fa fa-sign-out fa-fw"></i> Logout</a>

HTML的另一部分(页末):

代码语言:javascript
复制
<h:form prependId="false">
    <p:remoteCommand action="#{sessionMB.logout()}" name="logoutAccount" />
</h:form>

豆:

代码语言:javascript
复制
public void logout() {
    account = null;
    logged = false;
    FacesUtil.addInfoGrowl(MessageProvider.getMessage("message.logout.success"), null);
    FacesUtil.redirectToPage("", true);
}

redirectToPage方法:

代码语言:javascript
复制
public static boolean redirectToPage(String completePath, Boolean keepMessages) {
    try {
        FacesContext.getCurrentInstance().getExternalContext().getFlash().setKeepMessages(keepMessages);
        FacesContext.getCurrentInstance().getExternalContext().redirect(SimegoUtil.redirectProject() + completePath);

        return true;
    } catch (IOException ex) {
        FacesUtil.addErrorGrowl(MessageProvider.getMessage("message.redirectFail"), null);
        return false;
    }
}

所以,会是这样的:

单击> call remoteCommand Javascript > call bean >重定向到另一个页面

我只是没有得到模板部分你说,如果我能帮助更多的东西告诉我,希望你修复它。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21942116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档