【问题标题】:JSF a4j:support with h:selectManyCheckboxJSF a4j:支持 h:selectManyCheckbox
【发布时间】:2010-12-17 03:40:27
【问题描述】:

我在 JSF selectManyCheckbox 和 A4J 支持方面遇到了问题。目的是在选中复选框时运行一些操作。这在 Firefox 中完美运行。然而,在任何 IE (ie6 / ie7 / ie8) 中进行测试时,发现正在调用该操作,但所选值被置为 null。只是为了测试它,我放置了一个 JSF commandButton 来提交表单并检查选择的值是否正确。所以问题实际上出在 ajax 操作中(没有提交表单)。 这是我的代码:

        <h:selectManyCheckbox id="supportCategoryCardFilter" value="#{cardListProvider.categoriesHolder.selectedCategories}"  layout="pageDirection" required="false" >
            <f:selectItems value="#{cardListProvider.categoriesList}" />
            <a:support ajaxSingle="true" status="statusSearchCard" id="supportCategoryCardFilter2" event="onclick" reRender="cardsHolder, renderCardsCategoriesPanel" 
                 action="#{cardListProvider.findCards(cardListProvider.categoriesHolder.selectedCategories)}"  >
            </a:support>
        </h:selectManyCheckbox>

其中cardListProvider.categoriesListList&lt;SelectItem&gt;cardListProvider.categoriesHolder.selectedCategoriesList&lt;String&gt;

有人遇到过这个问题吗?谁能帮我这个? 谢谢

【问题讨论】:

  • 经过更多调试后,我注意到当我在 Firefox 中单击复选框而不在 IE 中单击复选框时,正在设置 selectManyCheckbox 值(value="#{cardListProvider.categoriesHolder.selectedCategories}")!只提交表格!看不懂……
  • 检查您没有嵌套表单。它可能会导致这种行为。
  • 伙计,就是这样...我们进行了巨大的重新设计,在中间我的一位同事将表单包含在表单中...我们在其他 .xhtml 中包含了很多 .xhtml很难注意到!非常感谢!我不明白为什么它在Firefox中工作!谢谢
  • 您好,我遇到了类似的问题...在我的情况下,在单击事件上,ajax 仅设置支持 bean 中第一个选定复选框的值。没有嵌套形式。知道可能出了什么问题吗?

标签: jsf richfaces ajax4jsf


【解决方案1】:

你应该使用 JBoss EL,或者声明一个 JSF 函数。 如果您使用 facelets,这很简单:

  • 在您喜欢的类中声明 public static 方法
  • 在 my.taglib.xml(facelets 描述符)中添加:
  • <function>
        <function-name>concat</function-name>
        <function-class>com.mycompany.myproject.ServiceFunctions</function-class>
        <function-signature>java.lang.String concat(java.lang.String, java.lang.String)   </function-signature>
    </function>
    

  • 另外,尝试将事件设置为“onselect”(或“onchange”)而不是“onclick”
  • 尝试设置 immediate="true"
  • 尝试删除方法参数 - 你不需要它,因为你可以通过托管 bean 的属性访问它 - 即 action="#{cardListProvider.findCards}" 然后在 findCards() 中获取 this.cardListProvider.categoriesHolder.selectedCategories
  • 尝试升级到 Richfaces 3.3.2.SR1
  • 【讨论】:

    • 然后尝试“onchange”或更好的“onselect”而不是“onclick”
    • 另一个事件不会有帮助。此外,在复选框/单选按钮中,您确实需要 onclick 而不是 onchange。
    • 你是对的 BalusC,改变事件对我没有帮助......无论如何,谢谢你 Bozho!还有其他想法吗?
    • 检查 firefox 错误控制台。并查看IE中是否有JS错误。 (P.S. 我不同意 'onclick' 更适合收音机/复选框)
    • Try immediate="true"(抑制验证问题)
    【解决方案2】:

    我很惊讶这甚至可以在 Firefox 中使用。操作方法不支持参数。来自 Richfaces 文档:

    signature must match java.lang.Object action()

    http://livedemo.exadel.com/richfaces-demo/richfaces/support.jsf?tab=info&cid=1615759

    【讨论】:

    • 如果您使用 JBoss EL 而不是标准 EL,它确实支持它。
    • 是的,我正在使用 JBoss EL...无法弄清楚这一点:/
    猜你喜欢
    • 2011-07-01
    • 2011-07-21
    • 2016-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    • 2010-10-15
    相关资源
    最近更新 更多