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>