当前位置: 首页 > 面试题库 >

SelectOneMenu的Primefaces Mobile Ajax更新失败

杨飞
2023-03-14
问题内容

我想使用Primefaces 5.2创建一个移动表单,其中一个selectOneMenu结果selectOneMenu通过Ajax
更新第二个,就像这里的展示示例一样:http
:
//www.primefaces.org/showcase/ui/ajax/dropdown.xhtml,然后是移动版本。

我创建了一个JSF页面和backingbean 正是 像展示例子,它的工作原理。

但是,当我使用<f:view renderKitId="PRIMEFACES_MOBILE"/>第二个selectOneMenu元素添加移动外观时,更新后将其呈现为纯色,并显示永久旋转器。

...
<f:view renderKitId="PRIMEFACES_MOBILE" />
...
<h:body>
<h:form>
    <p:growl id="msgs" showDetail="true" />

    <p:panel header="Select a Location" style="margin-bottom:10px;">
        <h:panelGrid columns="2" cellpadding="5">
            <p:outputLabel for="country" value="Country: " />
            <p:selectOneMenu id="country" value="#{dropdownView.country}" style="width:150px">
                <p:ajax listener="#{dropdownView.onCountryChange}" update="city" />
                <f:selectItem itemLabel="Select Country" itemValue="" noSelectionOption="true" />
                <f:selectItems value="#{dropdownView.countries}" />
            </p:selectOneMenu>

            <p:outputLabel for="city" value="City: " />
            <p:selectOneMenu id="city" value="#{dropdownView.city}" style="width:150px">
                <f:selectItem itemLabel="Select City" itemValue="" noSelectionOption="true" />
                <f:selectItems value="#{dropdownView.cities}" />
            </p:selectOneMenu>

            <p:outputLabel for="debug" value="Debug: " />
            <p:inputText id="debug" value="#{dropdownView.debug}"/>
        </h:panelGrid>
...

Ajax调用的作品,当我更新的目标是debug我的inputText更新,但是当我的更新目标cityselectOneMenu不是。

这是一个错误吗?我在滥用移动方面吗?对此文档似乎很匮乏。

编辑

inputText不包括在源极,进行校正。


问题答案:

这是与PrimeFaces移动版关联的JavaScript中的错误。它没有考虑到移动渲染器会插入其他JS,然后在DOM中将下拉列表的HTML表示重新定位到其他位置(可以通过检查原始HTML输出(浏览器中的“查看源代码”)与实际的HTMLDOM树(浏览器中的“检查元素”)。

Chrome控制台中显示的确切JavaScript错误如下:

未发现NotFoundError:无法在“节点”上执行“ replaceChild”:要替换的节点不是该节点的子节点。

(我希望您将它作为学习提示,始终检查浏览器的控制台以获取线索)

最好的选择是将此错误报告给PrimeFaces家伙。

同时,解决方法是将其包装在另一个(普通)元素中并进行更新。

<p:selectOneMenu ...>
    ...
    <p:ajax ... update="cityWrapper" />
</p:selectOneMenu>

<h:panelGroup id="cityWrapper">
    <p:selectOneMenu id="city" ...>
        ...
    </p:selectOneMenu>
</h:panelGroup>

具体问题 无关
noSelectionOption="true"仅在添加hideNoSelectionOption="true"到组件时才有效。



 类似资料:
  • 问题内容: 当我选择第一个SelectOnMenu的任何项目时,我想更新第二个SelectOneMenu。现在,我从ManagedBean获取SelectOneMenus的值。我想我必须使用AJAX(jquery)将参数发送到ManagedBean。 问题答案: 实际上,您可以使用ValueChangeListener,当selectOneMenu的值更改时将调用它: 然后,在您的bean中,您可

  • 首先请原谅我的英语不正确。。。 我有一个primeface的组件的问题,我试图刷新一个p: selectOneMenu从一个p:命令按钮,但它不工作(它的工作在另一个xhtml页面,但不是在这里,我不明白为什么...) 首先,我从更新backingbean属性的p:autocomplete中选择一个项目(例如:userChoose)。 然后p:commandButton可以调用他的监听器并将use

  • 我知道这是查询已经在这里回答但我不知道为什么我的代码没有工作 我有两个列表,当第一个列表改变时,其他列表会更新,这是我的代码 这是我的后盾: 如果有人能在这方面提供帮助,或者给我一个很好的教程,我会非常感激的,提前谢谢

  • 问题内容: 有人可以帮我在Docker容器中轻松工作吗?每当我尝试在Docker容器中运行任何apt-get命令时,该命令都会失败。我正在运行Docker 1.1.1版,在Ubuntu 12.04上构建bd609d2。 当我做 我说错了 无法解析“ archive.ubuntu.com” 我试图取消注释/ etc / default / docker下面的行 DOCKER_OPTS =“-dns

  • 我在我的项目中运行了composer update,因为我更改了计算机,所以我克隆了该项目。它返回了以下错误,但我不知道如何解决它们…: 问题1-系统中缺少请求的PHP扩展ext mcrypt*。安装或启用PHP的mcrypt扩展。 问题2-guzzle/guzzle v3.9.3的安装请求- 问题3-phpoffice/phpexcel 1.8.1的安装请求- 问题4-sentry/sentry

  • 我使用的是primefaces 3.5,在datatable中的一列中有一个p:selectonemenu。我在同一数据表的另一列上有一个提交按钮。当我提交时,该行将被删除。在这里,当我选择“其他”然后执行提交操作并更新表单时,其他行中的p:selectonemenu项将获得“其他”作为第一个值。每次将“其他”设置为最后一个值的方法是什么