Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Primefaces组件不更新_Java_Ajax_Jsf_Primefaces - Fatal编程技术网

Java Primefaces组件不更新

Java Primefaces组件不更新,java,ajax,jsf,primefaces,Java,Ajax,Jsf,Primefaces,我有一个用于在3.0.1中自我更新的p:dataGrid。现在我升级到了PF 3.1,“availableIcons”组件的ajax更新事件不再触发。我没有得到在视图中找不到组件的错误 XHTML <h:form id="Application"> ...... <p:confirmDialog id="iconDialog" message="Select one icon" showEffect="bounce" hideEffect="explod

我有一个用于在3.0.1中自我更新的p:dataGrid。现在我升级到了PF 3.1,“availableIcons”组件的ajax更新事件不再触发。我没有得到在视图中找不到组件的错误

XHTML

<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>
我试图更新=“@form”,然后更新启动,但它完全关闭了模式面板

谢谢,
Coen

事实上,PrimeFaces通过相对客户机ID定位组件的方式是遵循

在特定情况下,您需要指定
的绝对客户端ID。最简单的方法是在生成的HTML源代码中检查
的ID。到目前为止给出的代码是
Application:availableIcons
。您需要在其前面加上
以使其成为绝对值,然后在
更新中引用它,如下所示:




根据评论更新,结果根本不起作用。您可以尝试将表包装在一些不可见的包含组件中,如
,然后进行更新。或者,您可以考虑将<代码> <代码>移动到对话框中,而不是使用<代码>更新=“@窗体”< /代码>。不管怎样,将
置于对话框之外有点奇怪。您肯定不会在同一表单中提交对话框外部的所有其他输入。

事实上,PrimeFaces通过相对客户机ID定位组件的方式是遵循

在特定情况下,您需要指定
的绝对客户端ID。最简单的方法是在生成的HTML源代码中检查
的ID。到目前为止给出的代码是
Application:availableIcons
。您需要在其前面加上
以使其成为绝对值,然后在
更新中引用它,如下所示:





根据评论更新,结果根本不起作用。您可以尝试将表包装在一些不可见的包含组件中,如
,然后进行更新。或者,您可以考虑将<代码> <代码>移动到对话框中,而不是使用<代码>更新=“@窗体”< /代码>。不管怎样,将
置于对话框之外有点奇怪。您肯定不会在同一表单中提交对话框之外的所有其他输入。

您的具体问题尚不清楚。您说过组件不会更新,但您也说过ajax事件不会触发。现在的具体问题到底是什么?您的意思是说ajax请求实际上已被触发,但ajax响应不包含更新吗?如果您不确定,请再次查看特定于浏览器的web developer工具集。好的,我的意思是ajax更新事件不再触发。实际的ajax更改事件仍然会发生。我将重写它。更新是否在ajax响应中?嗨,BalusC,我不太明白您对ajax响应的意思。发生的情况是,会触发更改事件,从而调用侦听器中的方法,但唯一更新的组件是当前复选框,而不会计算datagrid上的其他复选框。由JavaScript触发的HTTP请求的响应。在Chrome/IE9中,您可以在开发者工具的“网络”选项卡中看到它(按F12)。在Firefox中,你首先需要安装Firebug插件。你的具体问题还不清楚。您说过组件不会更新,但您也说过ajax事件不会触发。现在的具体问题到底是什么?您的意思是说ajax请求实际上已被触发,但ajax响应不包含更新吗?如果您不确定,请再次查看特定于浏览器的web developer工具集。好的,我的意思是ajax更新事件不再触发。实际的ajax更改事件仍然会发生。我将重写它。更新是否在ajax响应中?嗨,BalusC,我不太明白您对ajax响应的意思。发生的情况是,会触发更改事件,从而调用侦听器中的方法,但唯一更新的组件是当前复选框,而不会计算datagrid上的其他复选框。由JavaScript触发的HTTP请求的响应。在Chrome/IE9中,您可以在开发者工具的“网络”选项卡中看到它(按F12)。在Firefox中,首先需要安装Firebug插件。嗨,BalusC,我在发布这个问题之前尝试了所有这些组合。我知道3.1中的新变化。当我更新=“:Application:availableIcons”时,仍然没有更新,我得到了响应。当我使用update=“Application:availableIcons”时,我得到一个“视图中找不到组件错误”。奇怪,对吗?另一件事是,在3.0.1中,我使用Update =“Apple:Advabl图标”,并且工作得很好。您可以考虑将表单移动到对话框中,而使用<代码> Update =“@窗体”< /C>。将表单放在对话框之外有点奇怪。您肯定不会在同一表单中提交对话框外部的所有其他输入,对吗?嗨,BalusC,代码实际上是一个非常复杂的GUI的片段,因此所有内容都在一个表单中。我将尝试使对话框成为一个单独的形式,看看这是否真的可以作为一种解决方法。谢谢这是个好主意。拥有“上帝形态”并不一定是最佳实践。这样,默认情况下,您将提交/处理/转换/验证同一表单中的所有内容。如果有多个“部分”,可能会相互干扰。把这些“部分”放在各自的
中。嗨,巴卢斯克,在我发布本期之前,我尝试了所有这些组合。我知道3.1中的新变化。当我更新=“:Application:availableIcons”时,仍然没有更新,我得到了响应。当我使用update=“Application:availableIcons”时,我得到一个“视图中找不到组件错误”。奇怪吧?另一件事是,在3.0.1中,我使用了update=“Application:availableIcons”和
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;
}