【问题标题】:How to set autocomplete off for selectOneMenu?如何为 selectOneMenu 设置自动完成功能?
【发布时间】:2013-10-08 07:11:57
【问题描述】:

您好,我需要为 primefaces 的selectOneMenu 关闭自动完成功能,但没有这样的属性。我们在 inputText 和其他一些组件的 primefaces 中具有此属性。

当用户刷新页面时,如何关闭自动完成功能或只选择默认值。

我试过这样。

<p:selectOneMenu value="#{myBean.myVar}" autocomplete="off" id="selectMenu">
       <f:selectItems value="#{myBean.nameList}" var="cat"
                    itemLabel="#{cat.name}"
                    itemValue="#{cat.name}" />
</p:selectOneMenu>

附:我正在使用 Liferay JSF Portlet

请参考我的问题---After refresh I get old values in my page

我已经在 IE 和 Chrome 中检查过这个问题,它在那里运行良好。我只在 Firefox 中遇到这个问题。

【问题讨论】:

  • 您说的是普通的selectOneMenu 还是带有过滤功能的selectOneMenu?如果您的值没有被清除,那是因为您仍然在托管 bean 中...
  • 正常的 selectOneMenu。而且我已经尝试过没有任何变量,我得到了相同的结果
  • 您使用的是什么浏览器?我想您尝试使用不同的浏览器得到不同的结果。 FF 和 Chrome 从来没有发生在我身上,而不是在 selectonemenu 中。如果您发布完整的 SSCCE 和可测试的代码,我们将不胜感激。

标签: jsf primefaces


【解决方案1】:

我知道这是一篇很老的帖子,但我今天遇到了这个问题,我认为我所写的内容可能对某些人有用,即使我只使用 JSF 而不是 Primeface。

使用 JSF 2.2,您可以使用 &lt;f:passThroughAttribute&gt; 标记添加属性(请参阅 this answer)。

在我的情况下,我必须将属性直接放在 h:form 元素上,因为浏览器(Chrome 48)似乎忽略了 select 元素上的 autocomplete(可能是 Chrome 错误?)。

<h:form>
    <f:passThroughAttribute name="autocomplete" value="off" />
    ...
</h:form>

【讨论】:

    【解决方案2】:

    我建议您在刷新页面时首先更新或清除 myBean.myVar 值。 这将解决问题。 并且您不会获得默认选择的值。

    【讨论】:

    • 它已经完成了。实际上,每当用户在托管 bean init() 方法上刷新页面时,都会调用该方法初始化所有值,包括 myVar。这是由于浏览器自动完成支持
    • @KushSahu 你能说出你使用的是哪个浏览器吗?你完全确定你的myVar 值在显示时是null 吗?在你的 getter 方法中使用断点检查它。
    • 这不是因为浏览器自动完成需要你的托管 Bean 代码在这里。
    • @XtremeBiker 是的,我敢肯定。同样在消除对托管 bean 的所有依赖后,它给了我相同的结果
    • @BholaVishwakarma 正如我在上面的评论中所说,我在删除我的变量(myVar)后尝试过。它给了我同样的结果。请参考我的问题stackoverflow.com/questions/19227620/… 也请参考 BalusC 对该问题的回复
    【解决方案3】:

    xonya 永远不会太晚。这是正确的答案:

    添加:

    HttpServletResponse response = (HttpServletResponse)
    FacesContext.getCurrentInstance().getExternalContext().getResponse();
    response.setHeader("Cache-Control", "no-cache, no-store");
    response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
    response.setDateHeader("Expires", 0); // Proxies.
    

    在 XHTML 中将其添加到 h:form:

    <h:form>
        <f:passThroughAttribute name="autocomplete" value="off" />
    </h:form>
    

    我在 Google Chrome 中遇到了问题。

    再次感谢 Xonya。

    【讨论】:

      猜你喜欢
      • 2018-09-13
      • 1970-01-01
      • 2021-06-24
      • 2015-03-21
      • 1970-01-01
      • 2011-03-12
      • 2016-10-07
      • 2012-07-15
      • 2014-08-11
      相关资源
      最近更新 更多