2015-11-27 8 views
0

Я хотел бы обновить в одну колонку в <h:outputText> путем обработки значения в <h:selectOneRadio>, расположенной в другом столбце Внутри DataTable:AJAX обновление или визуализации «указывает» правильный ClientId, но не обновляет значение в DataTable

... 
      <rich:column>   
        <h:selectOneRadio id="mainSelect" value="#{row.select1}" required="true" > 
         <f:selectItems value="#{row.responses}" var="resp" itemLabel="#{resp.label}" itemValue="#{resp.response}" />         
         <a4j:ajax event="change" render="outputPanel1" 
            listener="#{subTableView.updateSecond(row.select1)}" />  
        </h:selectOneRadio> 
      </rich:column> 
      <rich:column> 
       <a4j:outputPanel id="outputPanel1"> 
         <h:outputText value="#{row.select1}"/> 
         <p>#{component.clientId}</p> 
       </a4j:outputPanel> 
      </rich:column> 
... 

ниже мой DataTable и HTML панели Firebug, ниже указывая (автоматически подсвечиваются желтым цветом на Firebug) правильное clientId когда радио-кнопка нажата, но значение берется из базы данных загружается во время вид сборки внутри <span> не изменить (от YesR до NoR в этом пример).

datatable being updated

Значение NoR приписывается к правильному радиокомпонентом, как показано ниже, но не заменяет YesR:

changed values highlighted within Firebug

Хорошая вещь, что процесс каждой строки не зависит и selectOneRadio процесс указывает на соответствующий outputPanel1 для каждой строки. Я пробовал разные комбинации <p:ajax update="">, <f:ajax render=""> и <h:panelGroup> без успеха. Я также пробовал различные события, такие как click, change и без успеха.

В чем причина того, что значение в outputPanel1 не обновляется?

Я использую WildFly 9.0.2 (Mojarra 2.2.12) с RichFaces 4.5.8 (или PF5.3) (протестирован в разных браузерах).

EDIT (для onepotato):

<rich:dataTable id="grid" width="5000" 
           value="#{subTableView.getAllHeaders()}" 
           var="head" > 

       <rich:column colspan="3" > 
        <h:outputText value="#{head.name}" /> 
       </rich:column> 

       <rich:collapsibleSubTable id="cellGrid" value="#{head.questions}" var="row" > 

        <rich:column> 
          <h:outputText value="#{row.question}" /> 
        </rich:column> 

        <rich:column>   
         <h:selectOneRadio id="mainSelect" value="#{row.select1}" required="true" > 
          <f:selectItems value="#{row.responses}" var="resp" itemLabel="#{resp.label}" itemValue="#{resp.response}" />         
          <a4j:ajax event="change" render="outputPanel1" 
             listener="#{subTableView.updateSecond(row.select1)}" />  
         </h:selectOneRadio> 
       </rich:column> 
       <rich:column> 
        <a4j:outputPanel id="outputPanel1"> 
          <h:outputText value="#{row.select1}"/> 
          <p>#{component.clientId}</p> 
        </a4j:outputPanel> 
       </rich:column> 


       </rich:collapsibleSubTable> 

      </rich:dataTable> 

Bean:

@ManagedBean 
@ViewScoped 
public class SubTableView implements Serializable{ 

    private static final long serialVersionUID = 1L; 

    @EJB 
    private PublicService publicService; 


    private List<Response> responses; 
    private Response response = new Response(); 

    private List<Header> headers; 
    private Header header = new Header(); 

    @PostConstruct 
    public void init() { 

     this.responses = publicService.getAllResponses(); 

     this.headers = publicService.getAllHeaders(); 
    } 

+getters & setters 

Услуги:

@PersistenceContext 
    private EntityManager entityManager; 



    public List<Header> getAllHeaders(){ 

      List<Header> headers = entityManager.createQuery("select h from Header h",Header.class).getResultList(); 

        for(Header h : m.getHeaders()) 
        { 

         headers.add(h); 


          for(Question q : h.getQuestions()) 
          { 

          } 

        } 

      return headers; 

    } 
+0

Что делает слушатель? Он должен работать без него. – Makhiel

+0

Да, он работает без него. (Содержит метод проверки sysout) – LEK

+0

Я удалил свой ответ, поскольку понял, что наши случаи, вероятно, не совпадают. Глядя на код, который вы опубликовали, он должен работать, даже без слушателя. Не могли бы вы предоставить код для содержимого связанной таблицы и управляемого компонента, чтобы я мог воспроизвести ее на моей машине? – Bnrdo

ответ

0

Хотя пытался несколько т Редакторы IME до с PrimeFaces Datatable: PFS, наконец, работал здесь (RF DataTable) для этого:

Я добавил следующую АЯКС строку в selectOneRadio: <p:ajax update="@(.status)" />

с целевой столбец:

   <h:panelGroup id="outputPanel1" styleClass="status"> 

         <h:outputText id="display1" value="#{row.answer.select1}" /> 

       </h:panelGroup> 

Но теперь я имеют следующую проблему: TabView First Tab not toggled as expected

+0

Если это ваш ответ, пожалуйста, улучшите свой вопрос (теги и содержимое). Он совсем не соответствует – Kukeltje

+0

Не могли бы вы объяснить, почему? Вы пытались понять мою проблему? – LEK

+1

В вашем решении используется p: ajax, но нет тега PrimeFaces и ничего не связано с PrimeFaces в вопросе – Kukeltje

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

  • Нет связанных вопросов^_^