在carusell中更新JSF

在carusell中更新JSF,jsf,primefaces,Jsf,Primefaces,我目前尝试实现一个网站,其中一个对话框,从旋转木马打开,改变了数据库中的一些东西,结果显示在屏幕上。为此,我尝试更新对话框中的一个区域。不幸的是,更新carusell中的内容似乎不起作用 我将代码缩短为一个最小的示例,因此使用以下代码: <p:carousel id="page" value="#{pagebean.pages}" var="item" numVisible="1"> <h:form id="dlg_2_form"> <

我目前尝试实现一个网站,其中一个对话框,从旋转木马打开,改变了数据库中的一些东西,结果显示在屏幕上。为此,我尝试更新对话框中的一个区域。不幸的是,更新carusell中的内容似乎不起作用

我将代码缩短为一个最小的示例,因此使用以下代码:

<p:carousel id="page" value="#{pagebean.pages}"
    var="item" numVisible="1">
    <h:form id="dlg_2_form">
        <h:outputText id="test_2" value="#{pagebean.value}" />
        <p:remoteCommand name="update_2" update="test_2" />
        <a href="#" onclick="update_2();"> Increment</a>
    </h:form>
</p:carousel>

单击Increment后不会调用函数
pagebean.value
,但因此,单击Increment时会调用
pagebean
的构造函数。因此,旋转木马似乎无法更新其中的某些内容

是否有人知道,是否有可能更新转盘中的内容,或者是否有解决此问题的方法


编辑:在下面的讨论之后,我知道如果相应bean的作用域设置为@ViewScoped,增量确实有效。我也可以通过给它一个widgetVar并访问它的click函数来触发这个按钮,这样就可以了。不幸的是,我想要使用的Bean是SessionScoped,并且在这种视图下它不起作用。有人知道如何解决这个问题吗?我可以将所有内容复制到第二个Bean中,这是ViewScope,但这不是一个很好的解决方案

首先,尝试将托管bean的范围更改为
@ViewScoped
,以便在用户处于同一视图时,bean保持活动状态。其次,您应该使用
而不是
,因为它的
onclick
方法调用了
。谢谢,我尝试过更改范围(以前是
@SessionScoped
),但这没有改变任何东西。直接使用commandlink本身设置文本(使用
Increment
)确实会使文本发生更改,但remoteCommand stil不会更改文本(而旋转木马外部的完全相同的源会这样做)。commandlink和普通链接的命令会转换为Javascript。我发现有效的Javascript命令是
PrimeFaces.ab({source:'page:0:dlg_2_form:j_idt17',update:'page:0:dlg_2_form:test_2');
而无效的Javascript命令是
PrimeFaces.ab({source:'page:0:dlg_2_form:j_idt16',formId:'page:0:dlg_2_form',update:'page:0:dlg_2_form test 2_2_form param},update:'
。第二个命令在Javascript命令行中失败,因为没有定义参数-我不知道primeface为什么创建了这个命令。毕竟,我发现了第一个错误(来自中的一条注释):我使用的SessionScope注释来自javax.enterprise.context,所以它是真正的请求范围,每次都调用构造函数,更新得到了空数据(因为一个空的转盘),因此没有调用它。是的,对于初学者来说,在同一个项目中使用CDI和JSF是一个问题。