Значение t: радио не передается Backing Bean в Myfaces 2.1

У меня есть проблема, когда значение t:radio (связанное с t:selectOneRadio) не передается компоненту поддержки. В настоящее время мы конвертируем из JSF 1.x в JSF 2.x, используя MyFaces 2.1.13 на Jboss 7.2.0, и у нас есть версия 2.0 библиотеки Tomahawk. Я часами пробовал разные вещи, чтобы заставить его работать и искал все выше и ниже, но не могу найти никого другого, кто сталкивался с такой же проблемой. Я определил, что сеттер никогда не вызывается после проверки значения.

Я извлек код и упростил его, но до сих пор ничего не передается при вызове ajax.

<h:form id="profileReport">

    <h:messages />

    <h:panelGrid columns="2">

        <t:selectOneRadio id="selectQuestionnaire" layout="spread" required="true" 
                value="#{viewProfile.selectedQuestionnaire}">
            <f:selectItem itemValue="SC_PRE!20121212095427.0000000.059814626868021525" /> 
            <f:ajax event="click" execute="@this" render="profileReport:selectTemplate profileReport" />    
        </t:selectOneRadio>

        <h:outputLabel for="selectQuestionnaire" value="#{prmsgs.firstQuestionnaireLabel}" styleClass="labelText" />
        <t:radio index="0" for="profileReport:selectQuestionnaire" />

        <h:outputLabel for="selectTemplate" value="#{prmsgs.exploratoryProcessTemplate}:" styleClass="labelText" />
        <h:selectOneListbox id="selectTemplate" value="#{viewProfile.selectedInterpretiveProfileTemplateId}" required="#{menuNavigation.selectInterpretiveProfileActive}">
            <f:selectItems value="#{viewProfile.interpretiveProfileTemplates}"/>
        </h:selectOneListbox>
    </h:panelGrid>
</h:form>

Просто для целей тестирования я заменил t: selectOneRadio на h: selectOneRadio, и вызывается сеттер. Затем я попробовал t: selectOneRadio без t: radio, и это сработало. Так что, похоже, проблема с t: radio, хотя я не уверен, что это на данный момент. Я знаю, что Icefaces имеет схожую функциональность, но я не хочу представлять еще одну полную библиотеку компонентов только для этого единственного использования в настоящее время. Мы стараемся минимизировать изменения настолько, насколько это возможно, поскольку это очень экономичный процесс конверсии.

1 ответ

Решение

Когда используется t:selectOneRadio layout="spread", t:selectOneRadio - это один компонент, а t: radio - другой компонент, даже если они работают вместе. В этом случае, когда выполняется запрос ajax, жизненный цикл выполняется через t: selectOneRadio, но он не выполняется для t:radio. Компонент f:ajax не может быть переопределен таким образом, поэтому невозможно включить t: radio в жизненный цикл после его запуска.

Другие вопросы по тегам