JSF a4j: поддержка с h: selectManyCheckbox - PullRequest
4 голосов
/ 16 ноября 2009

У меня проблемы с поддержкой JSF selectManyCheckbox и A4J. Цель состоит в том, чтобы выполнить некоторое действие, когда установлен флажок. Это прекрасно работает в Firefox. Тем не менее, при тестировании в любом IE (то есть 6 / ie7 / ie8), обнаружил, что действие вызывается, но выбранное значение было установлено на ноль. Просто чтобы проверить это, я поместил 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>

.

У кого-нибудь была эта проблема? Кто-нибудь может мне с этим помочь? Спасибо

Ответы [ 2 ]

4 голосов
/ 17 ноября 2009

Вы должны использовать либо 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» попробуйте установить немедленное = "true" попробуйте удалить параметр метода - он вам не нужен, так как вы можете получить к нему доступ через свойство управляемого компонента - т.е. action="#{cardListProvider.findCards}", а затем в findCards() получить this.cardListProvider.categoriesHolder.selectedCategories попробуйте обновить до richfaces 3.3.2.SR1
1 голос
/ 17 ноября 2009

Я удивлен, что это даже работает в Firefox. Методы действий не поддерживают параметры. Из документов Richfaces:

signature must match java.lang.Object action()

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

...