Прикрепите rich: toggleControl к переключателям или выберите элементы - PullRequest
0 голосов
/ 11 августа 2009

Кто-нибудь имел успех при подключении компонента rich:toggleControl к компоненту переключателя (h:selectOneRadio) или в качестве альтернативы любому из его дочерних элементов выбора (в данном случае s:enumItem).

Пример основного кода:

<h:selectOneRadio value="#{backingValue}">
   <s:enumItem enumValue="VAL_1" itemLabel="Value One" />
   <s:enumItem enumValue="VAL_2" itemLabel="Value Two" />
   <s:convertEnum />
</h:selectOneRadio>

Идеально было бы подключить переключатель к s:enumItem s, чтобы он мог переключаться в определенное состояние. Однако в этот момент я был бы рад, если бы элемент управления тумблером можно было просто присоединить к h:selectOneRadio. Я пробовал управление переключением как потомок h:selectOneRadio и s:enumItem s; ни один не работает. Я также попытался обернуть toggleControl вокруг h:selectOneRadio, в этом случае переключатель управления работает, но переключатели не работают.

Ответы [ 2 ]

1 голос
/ 12 августа 2009

Просто привяжите свой rich: togglePanel к тому же значению на вашем компоненте поддержки и используйте тег поддержки a4j, чтобы обновить значение и заново отобразить панель.

Следует иметь в виду, что атрибут rich: togglePanel #value должен преобразовываться в строку, поэтому вам, вероятно, нужно будет выполнить привязку к # {backingValue.name ()} (не используйте toString (), поскольку кто-то может переопределить это позже ...)

что-то вроде этого должно работать:

<h:selectOneRadio id="radioButtons" value="#{backingValue}">
   <a4j:support event="onclick" 
                ajaxSingle="true" 
                reRender="radioButtons, togglePanel"/>

   <s:enumItem enumValue="VAL_1" itemLabel="Value One" />
   <s:enumItem enumValue="VAL_2" itemLabel="Value Two" />
   <s:convertEnum />
</h:selectOneRadio>


<rich:togglePanel id="togglePanel" 
                  switchType="ajax"
                  value="#{backingValue.name()}" >

   <f:facet name="VAL_1">
      <h:outputText value="Selected enum value 1"/>
   </f:facet>

   <f:facet name="VAL_2">
      <h:outputText value="Selected enum value 2"/>
   </f:facet>
</rich:togglePanel>

Возможно, вам также придется поиграться с привязкой событий поддержки ajax. Я обнаружил, что события «onchange» и «onselect» с переключателями могут быть немного неясными в отношении AJAX4JSF. Я сделал это с помощью Strings, где действие в моем компоненте поддержки изменяет состояние панели переключения, устанавливая значение - но оно ДОЛЖНО Работает также с перечислениями.

0 голосов
/ 11 августа 2009

Это не совсем ответ на мой вышеупомянутый вопрос, но я пока что использую его, пока не пойму, как сделать это «лучше» повторно.

В любом случае, обходной путь: добавьте событие onclick в h: selectOneRadio, которое вызывает API-интерфейс rich: togglePanel:

onclick="TogglePanelManager.toggleOnClient('TOGGLE_PANEL_ID_HERE',null);"

Тем не менее, я хотел бы сделать это "правильно", используя компонент rich: toggleControl, если это возможно ...

...