Adi*_*tzu 4 javascript jsf primefaces
我有一个像这样的primefaces组件:
<p:panel styleClass="errorsPanelClass" id="errorsPanel" header="Messages" toggleable="true" effect="drop" toggleSpeed="0" closeSpeed="0" widgetVar="errorsPanelWidget">
Run Code Online (Sandbox Code Playgroud)
我试图在javascript上下文中获取组件并更新它.
我已经尝试过:
function getWidgetVarById(id) {
for (var propertyName in PrimeFaces.widgets) {
if (PrimeFaces.widgets[propertyName].id === id) {
return PrimeFaces.widgets[propertyName];
}
}
}
Run Code Online (Sandbox Code Playgroud)
要么
要么
使用JavaScript获取widgetVar或选中/取消选中所有其他PrimeFaces复选框
如果我找到一个按类来获取widgetVar的解决方案,那将会很棒,但欢迎任何其他解决方案.
我也尝试过:
function getWidgetVarById() {
for ( var propertyName in PrimeFaces.widgets) {
alert(PrimeFaces.widgets[propertyName].id);
}
}
Run Code Online (Sandbox Code Playgroud)
但我得到一个javascript错误"'PrimeFaces.widgets.length'为null或不是对象"
有任何想法吗?
对于PrimeFaces 3.5,id和widgetVar之间没有映射.在3.5中,小部件被添加到"窗口"对象中,而不是存储在其他位置.这意味着widgetVar已经是一个可以使用的变量.
<p:panel id="errorsPanel" widgetVar="errorsPanelWidget">
Run Code Online (Sandbox Code Playgroud)
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版本中使用了"约定"方式(将'Widget'附加到也在id中的值并将其放在widgetVar属性中)
如果"更新"小部件,则意味着更新小部件的内容,您不能.没有refresh()一种方法可以做到这一点.你可以做的是将id(!)发送到服务器并update(..)通过requestContext这样的方式执行
RequestContext context = RequestContext.getCurrentInstance();
context.update("errorsPanel");
Run Code Online (Sandbox Code Playgroud)
但是,在更新列表服务器端时,这可能会更好.所以可能是你陷入了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>
Run Code Online (Sandbox Code Playgroud)
豆:
@ManagedBean
@RequestScoped
public class UpdateWidgetController {
public void refresh(final String id) {
RequestContext context = RequestContext.getCurrentInstance();
context.update(id);
}
}
Run Code Online (Sandbox Code Playgroud)
调用refreshWidget('errrosPanel'); 将实现你想要的.
不要使用PFE(或由于版本不兼容而无法使用此功能),您可以使用PF remoteCommand实现相同但3.5的具体示例可能略有不同
| 归档时间: |
|
| 查看次数: |
29718 次 |
| 最近记录: |