4

我在 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.categoriesList是一个List<SelectItem>并且cardListProvider.categoriesHolder.selectedCategories是一个List<String>

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

4

2 回答 2

4

您应该使用 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”
  • 尝试设置立即=“真”
  • 尝试删除方法参数 - 你不需要它,因为你可以通过托管 bean 的属性访问它 - 即action="#{cardListProvider.findCards}"然后在findCards()getthis.cardListProvider.categoriesHolder.selectedCategories
  • 尝试升级到richfaces 3.3.2.SR1
  • 于 2009-11-17T07:12:41.423 回答
    1

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

    signature must match java.lang.Object action()

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

    于 2009-11-16T23:12:03.283 回答