获取 javascript 中的 primefaces widgetVar 并更新它
Get primefaces widgetVar in javascript and update it
我有一个像这样的 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];
}
}
}
或
How to find a widgetVar?
或
Get widgetVar with JavaScript or check/uncheck all other PrimeFaces checkboxes
如果我能在 class 之前找到一个获取 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 中,小部件被添加到 'window' 对象中,而不是存储在其他地方。这意味着 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 相同(这在某些情况下会导致分类,这就是 PF 放弃此约定的原因)。
并且您仍然可以检查在 3.5 中 widgetVar 值是否以一种或另一种方式添加到小部件的外部 html 元素。然后你可以用一些 jquery 来检索它。就个人而言,我在以前的 PF 版本中使用 'convention' 方式(将 'Widget' 附加到也在 id 中的值并将其放在 widgetVar 属性中)
如果使用 'updating' 小部件,你的意思是更新小部件的内容,你不能。没有 refresh()
种方法可以做到这一点。你可以做的是将 id(!)
RequestContext context = RequestContext.getCurrentInstance();
context.update("errorsPanel");
但是在您更新列表服务器端时就这样做可能会更好。所以你可能掉进了XY陷阱
但如果确实需要,这里有一个可行的示例,使用 PrimeFaces extensions 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的具体例子可能有点不同
我有一个像这样的 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];
}
}
}
或
How to find a widgetVar?
或
Get widgetVar with JavaScript or check/uncheck all other PrimeFaces checkboxes
如果我能在 class 之前找到一个获取 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 中,小部件被添加到 'window' 对象中,而不是存储在其他地方。这意味着 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 相同(这在某些情况下会导致分类,这就是 PF 放弃此约定的原因)。
并且您仍然可以检查在 3.5 中 widgetVar 值是否以一种或另一种方式添加到小部件的外部 html 元素。然后你可以用一些 jquery 来检索它。就个人而言,我在以前的 PF 版本中使用 'convention' 方式(将 'Widget' 附加到也在 id 中的值并将其放在 widgetVar 属性中)
如果使用 'updating' 小部件,你的意思是更新小部件的内容,你不能。没有 refresh()
种方法可以做到这一点。你可以做的是将 id(!)
RequestContext context = RequestContext.getCurrentInstance();
context.update("errorsPanel");
但是在您更新列表服务器端时就这样做可能会更好。所以你可能掉进了XY陷阱
但如果确实需要,这里有一个可行的示例,使用 PrimeFaces extensions 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的具体例子可能有点不同