在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