rich:dataTable updated with ajax is never fill with the new
jadtn Jan 18, 2009 10:47 AMHi,
I've a problem i don't well understand.
My page is for manage my partenaires: a table display the list detailed of my partenaires, some fields under the table to modify/add/update partenaire, buttons for modifications
 4 main components of the page:
-a rich:dataTable wich contains all of my 'partenaires', each row is the detail of a partenaire
-a zone with fields for partenaire modification
-a button preview : before modify, add,delete, you must click on preview (this is for a visual check)
- buttons add/update/delete which rendered when the button preview have been clicked
Under browser all works, when i fill the field for create a new partenaire, i click preview, the button add appear and i click on it => the table is rerendered and the new partenaire appear as a new row, i test manual all comportement of my page and all is ok :-).
[in firefox] Just after add a partenaire in the table I look at the page source, and the new row isn t in the source code !? I think this is because it s ajax, and when the content of a page is modified, the source in the browser isn t updated?
In my jsfunit test, i think i have the same problem, i ve never the new row when i check on client or server side!
Is someone have an idea?
Thanks
public void testAddPartenaire() throws Exception {
 //this test add a a partenaire
 //the partenaire list is empty
 boolean actif=true;
 boolean onIndex=true;
 short classement=5;
 short note=3;
 //String detail="bla l'aç";
 String detail="Ah";
 String email="somebody@hotmail.com";
 String url=urls[0];
 // svpartenaires:mp:t:0:edit first button edit in the table
 //set the values to add new partenaire
 setFieldsPartenairesValues(actif, onIndex, classement, note, detail,email, url);
 // we have to click on preview for the button add is rendered for a visual check
 client.click(FieldsAdmPartenaires.BUTTON_AJAX_PREVIEW);
 //visual check is ok, we add the new partenaire
 client.click(FieldsAdmPartenaires.BUTTON_AJAX_ADD);
 //a new row must appear in the table
 HtmlOutputText c = (HtmlOutputText) server.findComponent(FieldsAdmPartenaires.TABLE_PATERN+"0:url");
 assertEquals(url, c.getValue()+"");//-->>>> HERE ALWAYS NULL
 }
 //Fill the fields form
 private void setFieldsPartenairesValues(boolean actif, boolean onIndex,
 short classement, short note, String detail, String email,
 String url) {
 client.setValue(FieldsAdmPartenaires.F_URL, url);//FieldsAdmPartenaires.F_URL = svpartenaires:mp:url
 client.setValue(FieldsAdmPartenaires.F_CHECKBOX_ACTIF, Boolean.toString(actif));//etc..
 client.setValue(FieldsAdmPartenaires.F_EMAIL, email);
 client.setValue(FieldsAdmPartenaires.F_CHECKBOX_ON_INDEX, Boolean.toString(onIndex));
 client.setValue(FieldsAdmPartenaires.F_CLASSEMENT, String.valueOf(classement));
 client.setValue(FieldsAdmPartenaires.F_NOTE, String.valueOf(note));
 client.setValue(FieldsAdmPartenaires.F_AREA_DETAIL, detail);
 }
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:rich="http://richfaces.org/rich"
 xmlns:a4j="http://richfaces.org/a4j"
 xmlns:ui="http://java.sun.com/jsf/facelets"
 >
<f:subview id="svpartenaires">
 <rich:panel header="gestion des partenaires (page partenaire)">
 <h4></h4>
 <a4j:form id="mp"> <a4j:keepAlive beanName="ctrlAdminPartenaires" />
 <rich:dataTable id="t" value="#{ctrlAdminPartenaires.partenaires}" var="p" width="300px" columnClasses="center"
 rows="15" reRender="ds" >
 <f:facet name="header">
 <h:outputText value="Partenaires"/>
 </f:facet>
 <rich:column >
 <f:facet name="header">
 <h:outputText value="Edit" />
 </f:facet>
 <a4j:commandButton id="edit" value="Edit" action="#{ctrlAdminPartenaires.editRow}" reRender="mp">
 <f:param id="p" name="id" value="#{p.url}"/>
 </a4j:commandButton>
 </rich:column>
 <rich:column sortBy="#{p.url}">
 <f:facet name="header">
 <h:outputText value="url"/>
 </f:facet>
 <h:outputText id="url" value="#{p.url}" />
 </rich:column>
 <rich:column sortBy="#{p.actif}">
 <f:facet name="header">
 <h:outputText value="Actif"/>
 </f:facet>
 <h:selectBooleanCheckbox id="actif" value="#{p.actif}" disabled="true" />
 </rich:column>
 <rich:column sortBy="#{p.onIndex}">
 <f:facet name="header">
 <h:outputText value="Sur page index"/>
 </f:facet>
 <h:selectBooleanCheckbox id="onindex" value="#{p.onIndex}" disabled="true" />
 </rich:column>
 <rich:column sortBy="#{p.note}" >
 <f:facet name="header">
 <h:outputText value="note"/>
 </f:facet>
 <h:outputText id="note" value="#{p.note}"/>
 </rich:column>
 <rich:column sortBy="#{p.classementLorizon}">
 <f:facet name="header" sortBy="#{p.classementLorizon}">
 <h:outputText value="classement de lorizon sur leur page"/>
 </f:facet>
 <h:outputText id="classement" value="#{p.classementLorizon}"/>
 </rich:column>
 <rich:column>
 <f:facet name="header" >
 <h:outputText value="email"/>
 </f:facet>
 <h:outputText id="email" value="#{p.email}"/>
 </rich:column>
 <rich:column>
 <f:facet name="header" sortBy="#{p.detail}">
 <h:outputText value="detail"/>
 </f:facet>
 <h:outputText id="detail" value="#{p.detail}"/>
 </rich:column>
 <f:facet name="footer">
 <rich:datascroller id="ds"></rich:datascroller>
 </f:facet>
 </rich:dataTable>
 <h:panelGrid columns="2">
 <h:outputLabel value="URL" for="url" /> <h:inputText id="url" value="#{ctrlAdminPartenaires.url}" />
 <h:outputLabel value="Est sur la page index de lorizon" for="index" />
 <h:selectBooleanCheckbox id="index" value="#{ctrlAdminPartenaires.onIndex}"/>
 <h:outputLabel value="actif (si inactif, non visible)" for="actif" />
 <h:selectBooleanCheckbox id="actif" value="#{ctrlAdminPartenaires.actif}"/>
 <h:outputLabel value="Note" for="note" /><h:inputText id="note" value="#{ctrlAdminPartenaires.note}" />
 <h:outputLabel value="Classement lorizon " for="classementSite" /><h:inputText id="classementSite" value="#{ctrlAdminPartenaires.classementLorizon}" />
 <h:outputLabel value="Email" for="email" /><h:inputText id="email" value="#{ctrlAdminPartenaires.email}" />
 </h:panelGrid>
 <h:inputTextarea id="detail" value="#{ctrlAdminPartenaires.detail}" rows="10" cols="50"/> <br/>
 <h:messages id="errors" styleClass="error" />
 <a4j:commandButton action="#{ctrlAdminPartenaires.reset}" value="reset" reRender="mp" />
 <a4j:commandButton id="preview" action="#{ctrlAdminPartenaires.preview}" value="Preview" reRender="mp" />
 <a4j:commandButton id="update" action="#{ctrlAdminPartenaires.update}" rendered="#{ctrlAdminPartenaires.preview}" value="Update" reRender="mp" />
 <a4j:commandButton id="add" action="#{ctrlAdminPartenaires.add}" rendered="#{ctrlAdminPartenaires.preview}" value="Ajouter" reRender="mp" />
 <a4j:commandButton id="delete" action="#{ctrlAdminPartenaires.delete}" rendered="#{ctrlAdminPartenaires.preview}" value="Delete" reRender="mp" />
 <a4j:status startText=" Chargement en cours..." startStyle="color:orange" stopStyle="color:purple" stopText=" Chargement terminé." />
 <h:panelGrid columns="3" width="90%">
 <h:outputText value="#{ctrlAdminPartenaires.url}" />
 <h:graphicImage value="#{ctrlAdminPartenaires.urlScreenShot}" />
 <h:outputText value="#{ctrlAdminPartenaires.detail}"/> <h:outputText value="#{ctrlAdminPartenaires.note}"/>
 </h:panelGrid>
 </a4j:form>
 </rich:panel>
 </f:subview>
</ui:composition> 
     
    