2012-02-07 4 views
2

Я спросил это на форуме PF, но никто, кажется, не хочет отвечать, поэтому, хотя я бы попробовал здесь свою удачу.JSF Primefaces TabView проблемы

У меня есть ui: repeat, который не обновляется правильно после вызова Ajax, когда он находится в TabView.

Простой сценарий У меня есть ui: repeat, указывающий на ArrayList (ArrayList содержит простые pojos со String). Внутри этого у меня есть h: inputText, чье значение - стример getter/setter. Ui: repeat содержится в h: panelGroup. Я использую p: commandButton для запуска действия для обновления ArrayList (просто добавьте пару объектов к нему значение Math.random для String), а затем обновите h: panelGroup. Обновленные значения в ArrayList не отражают в полях ввода ui: repeat. По-видимому, это влияет только на поля ввода, поскольку поля outputText корректно обновляются. Также, если я делаю то же самое для p: dataTable, поле ввода обновляется правильно. Если я удалю теги Tabview и Tab, он отлично работает.

Как это работает при удалении вкладок, я могу только предположить, что это ошибка, и она не предназначена для работы именно так. Если кто-то может подтвердить, действительно ли это так, или если существует жизнеспособная работа. Мне нужно использовать ui: repeat, поскольку мои поля не в табличном формате. Это произошло только после перехода с PF 2.2. Я в настоящее время на PF 3.1, Weblogic 10.3.4 и Mojarra 2.0.4

<p:tabView> 
    <p:tab title="Test"> 

     <h:form prependId="false"> 

      <p:commandButton id="testStringCheck" 
          value="Test String Check" 
          process="@form" 
          update="testPanel" 
          action="#{testBean.generateVOwithRandomStrings}"> 
      </p:commandButton> 

      <h:panelGroup id="testPanel" layout="block"> 
       <ui:repeat value="#{testBean.voList}" var="entry"> 
        <h:outputText value="#{entry.randomString}"/> 
        <p:inputText style="display:block;" 
           value="#{entry.randomString}" 
           size="15"> 
        </p:inputText> 
       </ui:repeat> 
      </h:panelGroup> 

     </h:form> 

    </p:tab> 
</p:tabView> 

ответ

0

Это что-то из-за ошибки в Primefaces CommandButton. Смотрите следующую тему:

http://forum.primefaces.org/viewtopic.php?f=3&t=17454

Вы можете попробовать заменить

<p:commandLink id="testStringCheck" ... update="@form" /> 

С <h:commandLink>

<h:commandLink id="testStringCheck" render="@form"/> 

Кроме того, из приведенной выше ссылке здесь интересный метод, который кто-то писал, что позволяет вы должны правильно найти правильный clientId для обновления.

http://paste.kde.org/177698/

+0

Спасибо за ответ, но это не решило проблему. Я уже пробовал h: commandButton и ссылку вместе с версиями pf. – andyfinch

+0

@andyfinch Вы пытались удалить атрибут процесса? Вероятно, это не обязательно. –

+0

По умолчанию это форма? Даже если это так, я все равно добавлю его для удобочитаемости. – andyfinch

1

В качестве обходного пути я использовал р: DataGrid вместо Ui: повторить. Это достигает взгляда, который у меня был в ui: повторяйте, так что я счастлив. Надеюсь, эта ошибка будет исправлена ​​в будущих выпусках.

0

температура раствора: вставить снаружи ч: panelGroup:

<p:outputPanel defered="true" delay="1" ..> 

и обновить outputPanel вместо panelGroup

Или использовать DataList компонент вместо Ui: повтор.

Еще один, я не уверен, но вы можете попробовать, поэтому обновлять класс вместо ID:

<h:panelGroup id="testPanel" layout="block" styleClass="testPanelCl" ../> 

и обновление: @(.testPanelCl), не забудьте идентификатор panelGroup без идентификатора JSF не может обновлять по класс

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