2010-05-11 3 views
0

Я делаю webapp в Seam, но столкнулся с проблемой, которую я не могу исправить.Величина формы не передается в Seam bean после a4j reRender

У меня есть форма JSF, где клиент может выбрать тип бронирования через выпадающий список. На основе выбранного значения отображаются другие компоненты формы.

Например: пользователь выбирает часы в качестве типа резервирования, панель панели отображается, когда клиент может выбрать начальный и конечный час. Но если клиент выбирает «часть дня» в качестве типа резервирования, выбирается selectOneMenu, где клиент может выбрать часть дня (утром, днем, вечером)

Реверсификация скважины, но значения компонентов с предоставленным условным значением не будет передаваться компоненту. Они остаются нулевыми значениями.

Это код, я говорю:

<s:div id="spot" 
     rendered="#{selectedProduct.productType.name eq 'Flex Spot'}"> 

    <h:panelGrid columns="2"> 
     <h:outputText value="Reservation Type" /> 
     <h:selectOneMenu value="#{selectedPeriodPart}"> 
      <s:selectItems 
       value="#{productManager.getAvailableDayPartsSpot()}" 
       var="daypart" 
       label="#{daypart.label}"></s:selectItems> 
      <s:convertEnum /> 

      <a4j:support ajaxSingle="true" 
         event="onchange" 
         action="#" 
         reRender="spot"> 
      </a4j:support> 
     </h:selectOneMenu> 

     <h:outputText id="date_spot" value="Date" /> 

     <a4j:outputPanel id="calendar_spot" layout="block"> 
      <rich:calendar value="#{reservation.reservationPeriod.startDate}" 
          locale="en" cellWidth="24px" 
          cellHeight="22px" 
          style="width:200px" /> 
     </a4j:outputPanel> 

     <h:outputText rendered="#{selectedPeriodPart eq 'DAY_PART'}" 
         value="Daypart" /> 

     <h:selectOneMenu value="#{selectedDaypart}" 
         rendered="#{selectedPeriodPart eq 'DAY_PART'}"> 
      <f:selectItem id="si_morning" itemLabel="Morning (6:00 - 12:00)" 
          itemValue="morning" /> 
      <f:selectItem id="si_afternoon" 
          itemLabel="Afternoon (12:00 - 18:00)" itemValue="afternoon" /> 
      <f:selectItem id="si_evening" itemLabel="Evening (18:00 - 00:00)" 
          itemValue="evening" /> 
     </h:selectOneMenu> 

     <h:outputText rendered="#{selectedPeriodPart eq 'HOURS'}" 
         value="Hours" /> 

     <h:panelGroup id="hours_spot" 
         rendered="#{selectedPeriodPart eq 'HOURS'}"> 
      <ui:include src="/includes/reservation/select_hours.xhtml" /> 
     </h:panelGroup> 
    </h:panelGrid> 
</s:div> 

Примечание: календарь значение этого получить передается обратно в бобе, но значение этого фрагмента кода нет (это если вы удалите тонированный условный):

selectOneMenu value="#{selectedDaypart}" rendered="#{selectedPeriodPart eq 'DAY_PART'}" 

ответ

0

Я исправил его. - В коде, который я разместил, ничего не случилось. Поскольку я не смог решить эту проблему, я продолжил на другой странице в том же разговоре. Я заметил еще более странное поведение: выброс переменной не работал и т. Д.

Я понял, что ошибка была в какой-то другой части кода, которая после исправления исправила всю проблему.

Thx для ответа ребятам!

0

Вы должны убедиться, что условные, ответственная за результат атрибута rendered также же в последующем запросе формы представить. Поскольку, когда компонент не отображается, JSF не будет применять значения запроса к ним.

В двух словах, свойство позади #{selectedPeriodPart} должно быть таким же в последующем запросе. Существует несколько решений:

  1. Положить бобы в объем сессии. Простое решение, но плохое для памяти сервера и опыта клиента (обновления будут отображаться в нескольких вкладках/окнах в том же сеансе).

  2. Пройдите его, используя <h:inputHidden>. Не уверен, что это похоже на изображение Ajax/Richfaces. Лучше использовать <a4j:keepAlive> здесь.

  3. Используйте область разговора. Шейм предлагает удобства для этого.

+0

Спасибо за ответ на вопрос =) Это не решает мою проблему = ( Чтобы сделать некоторые вещи ясно: Подложка боб сессионного компонента (EJB). С областью разговора Я попытался обертывание selectOneMenu value="#{selectedDaypart}" в a a4j:outputPanel и поместите условное обозначение на этот компонент, однако это тоже не сработало. – Casper

+0

Извините, вы не можете больше помочь, чем просто предлагать запустить отладчик.По крайней мере, теперь вы знаете, где искать причину проблемы и как ее исправить: убедитесь, что атрибут «rendered» рассматриваемого компонента не оценивается как «false» в последующем запросе. – BalusC

Смежные вопросы