【发布时间】:2012-02-14 16:36:38
【问题描述】:
我有一个用于在 3.0.1 中自我更新的 p:dataGrid。现在我升级到 PF 3.1 并且“availableIcons”组件的 ajax 更新事件不再触发。我没有收到在视图中找不到组件的错误消息。
XHMTL
<h:form id="Application">
......
<p:confirmDialog id="iconDialog" message="Select one icon"
showEffect="bounce" hideEffect="explode" header="Icon Selection"
severity="alert" widgetVar="iconSelect" modal="false">
<p:dataGrid id="availableIcons" var="icon"
value="#{appEditController.availableIcons}" columns="4">
<p:column>
<p:panel id="pnl" header="" style="text-align:center">
<h:panelGrid columns="1" style="width:100%" id="iconPanelGrid">
<p:graphicImage value="/resources/icons/#{icon.icon}"
id="iconImage" />
<p:selectBooleanCheckbox id="iconSelector"
value="#{icon.selected}"
disabled="#{appEditController.isIconSelected(icon)}">
<p:ajax update="availableIcons" event="change"
process="availableIcons"
listener="#{appEditController.iconSelectedChanged(icon)}" />
</p:selectBooleanCheckbox>
</h:panelGrid>
</p:panel>
</p:column>
</p:dataGrid>
<p:commandButton value="Done" update="currentIcon"
action="#{appEditController.updateCurrentIcon}" ajax="false"
oncomplete="iconSelect.hide()" />
</p:confirmDialog>
.......
</h:form>
我看不出有什么缺失或不正确。
这是后台 bean 代码
public void updateCurrentIcon() {
for (IconVO iconVO : availableIcons) {
if (iconVO.isSelected()) {
log.debug("CURRENT ICON IS NOW " + iconVO.getIcon());
currentIcon = iconVO;
break;
}
}
}
public void iconSelectedChanged(IconVO iconVO) {
if (iconVO == currentIcon) {
log.debug("NULLING ICON");
currentIcon = null;
} else {
log.debug("SETTING NEW ICON");
currentIcon = iconVO;
}
}
public boolean isIconSelected(IconVO iconVO) {
log.debug("IS ICON SELECTED " + iconVO.getIcon());
if (currentIcon == null
|| iconVO.getIcon().equals(currentIcon.getIcon())) {
return false;
}
return currentIcon != null;
}
我尝试执行 update="@form",然后更新触发但它完全关闭了模式面板。
谢谢, 科恩
【问题讨论】:
-
您的具体问题不清楚。你说组件没有更新,但你也说 ajax 事件没有触发。现在具体的问题是什么?您不是说 实际上 触发了 ajax 请求,但 ajax 响应不包含更新吗?如果您不确定,请再次查看特定于浏览器的 Web 开发人员工具集。
-
好的,我的意思是 ajax 更新事件不再触发。实际的 ajax 更改事件仍然发生。我会重写的。
-
ajax响应中是否有更新?
-
嗨 BalusC,我不太明白你对 ajax 响应的意思。发生的情况是更改事件触发,因此调用了侦听器中的方法,但唯一更新的组件是当前复选框,数据网格上的其他复选框未评估。
-
JavaScript 触发的 HTTP 请求的响应。在 Chrome/IE9 中,您可以在开发人员工具的“网络”选项卡中看到它(按 F12)。在 Firefox 中,您需要先为此安装 Firebug 插件。
标签: java ajax jsf primefaces