在javascript中获取primefaces widgetVar并更新它

我有一个像这样的primefaces组件:

<p:panel styleClass="errorsPanelClass" id="errorsPanel" header="Messages" toggleable="true" effect="drop" toggleSpeed="0" closeSpeed="0" widgetVar="errorsPanelWidget">

我试图在javascript上下文中获取组件并更新它。

我已经尝试过:

function getWidgetVarById(id) {
   for (var propertyName in PrimeFaces.widgets) {
     if (PrimeFaces.widgets[propertyName].id === id) {
       return PrimeFaces.widgets[propertyName];
     }
   }
}

要么

如何找到widgetVar?

要么

使用JavaScript获取widgetVar或检查/取消选中所有其他PrimeFaces复选框

如果我能找到解决方案按类来获取widgetVar,那将是非常好的,但是欢迎任何其他解决方案。

我也试过:

function getWidgetVarById() {
    for ( var propertyName in PrimeFaces.widgets) {
        alert(PrimeFaces.widgets[propertyName].id);
    }
}

但我得到一个JavaScript错误“'PrimeFaces.widgets.length'为空或不是一个对象”

有任何想法吗?


PrimeFaces 3.5中没有id和widgetVar之间的映射。 在3.5中,小部件被添加到“窗口”对象,而不是存储在其他地方。 这意味着widgetVar已经是一个你可以使用的变量了。

<p:panel id="errorsPanel" widgetVar="errorsPanelWidget">

3.5 / 4.0 :(在4.0中仍然有效,但不赞成使用PF('..')方式) errorsPanelWidget.close()

5.0和更高版本: PF('errorsPanelWidget').close() (除非您配置传统模式,之后它将表现得像3.5 / 4.0)

最简单的方法就是使用一个约定,将你的widgetVar命名为你的id,但使用后缀名,例如id_widget。 你可以(建议不要这样做)把widgetVar放出来,然后这个小部件就是id的标识符(这可能会导致案例中的classhes,这就是PF放弃这个约定的原因)。

并且您仍然可以检查3.5中的widgetVar值是否以某种方式添加到窗口小部件的外部html元素。 然后你可以用一些jquery检索它。 就我个人而言,我在之前的PF版本中使用了'convention'方式(将'Widget'附加到id中的值并将其放入widgetVar属性中)

如果用'更新'小部件,则意味着更新小部件的内容,但不能。 没有refresh()这种方法。 你可以做的是发送id(!)到服务器并通过requestContext像这样执行update(..)

RequestContext context = RequestContext.getCurrentInstance();
context.update("errorsPanel");

但是,更新列表serverside的时候可能会更好。 所以可能是你已经陷入了XY陷阱。

但是,如果真的需要它,那么使用PrimeFaces扩展remoteCommand是个很好的例子,因为这是最简单的方法)

XHTML:

<pe:remoteCommand id="refreshWidgetCommand" name="refreshWidget" process="@this" actionListener="#{updateWidgetController.refresh}">  
    <pe:methodSignature parameters="java.lang.String"/>  
    <pe:methodParam name="id"/>  
</pe:remoteCommand>  

豆:

@ManagedBean  
@RequestScoped  
public class UpdateWidgetController {  

    public void refresh(final String id) {  

        RequestContext context = RequestContext.getCurrentInstance();
        context.update(id);
    }
}

调用refreshWidget('errrosPanel') ; 会达到你想要的。

不要使用PFE(或者由于版本不兼容导致无法使用),您可以使用PF remoteCommand实现相同功能。但3.5的具体示例可能会有所不同

链接地址: http://www.djcxy.com/p/68555.html

上一篇: Get primefaces widgetVar in javascript and update it

下一篇: Primefaces show video generated in bean