[JSF 1.1 + Ajax4JSF] a4j:commandButton ne rafraichis pas un dataTable
Je me permets de relancer la discussion au cas où ! Car bien que j'ai pu avancer sur d'autres composantes, je reste bloquer... Merci de votre compréhension :oops::oops::oops::ccool:
Bonjour,
Je suis face à un probleme en JSF, j'utilise JSF 1.1 et Ajax4jsf sur un serveur Tomcat 6 (sans Richfaces : consignes m'ont été données de ne pas l'utiliser afin de ne pas allourdir l'application)
J'arrive à faire fonctionner différents elements AJAX4JSF (selectOneMenu, ...)
mais je n'arrive pas à faire un raffraichissement (sans rechargement de la page d'où utilisation d'Ajax4JSF)... d'un t:dataTable (tomw
En utilisant un bouton h:commandButton, mes données sont bien enregistrés et mis à jour...
Et avec a4j:commandButton, je n'y arrive pas... J'ai pourtant essayer plein de possibilités (mais je dois être un peu boulet) : <a4j:region>, <a4j:outputpanel> :
dois-je encapsuler des forms ??? dois-je impérativement utiliser RichFaces ???... En tenant de tracer le cycle de vie de mes évenements, en appuyant sur le a4j:commandButton, je m'aperçois que je ne rentre pas dans la méthode
Je suis un peu perdu... donc si vous avez des pistes (en observant mon code ci-dessous) vous me seriez d'une grande aide...
JSF
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
| <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="c"%>
<%@ taglib uri="http://myfaces.apache.org/tomahawk" prefix="t" %>
<%@taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<%@ taglib uri="https://ajax4jsf.dev.java.net/ajax" prefix="a4j"%>
<c:subview id="editEmployeeView">
<meta content="no-cache" http-equiv="Cache-Control" />
<meta content="no-cache" http-equiv="Pragma" />
<h:form id="editEmployeeForm" >
<t:inputHidden forceId="true" id="employeeId" value="#{employeesController.displayedEmployee.id}"></t:inputHidden>
<a4j:keepAlive beanName="employeesController" />
<h:messages showDetail="true" />
<t:panelTabbedPane bgcolor="#FFFFCC" id="tabEmployee" width="500" >
<t:panelTab id="tabSkills" label="#{msg.employee_skills}" >
<h:panelGrid width="350" columns="2">
<h:outputLabel for="skl_lst_domain" value="#{msg.experience_domain}" />
<t:selectOneMenu id="skl_lst_domain" value="#{employeesController.domainSelectedItem}" >
<c:selectItems value="#{employeesController.itemsDomains}" />
<a4j:support event="onchange" reRender="skl_lst_skill" action="#{employeesController.refreshItemsSkills}" ></a4j:support>
</t:selectOneMenu>
<h:outputLabel for="skl_lst_skill" value="#{msg.experience_skill}" />
<t:selectOneMenu id="skl_lst_skill" value="#{employeesController.skillSelectedItem}" >
<c:selectItems value="#{employeesController.itemsSkills}" />
</t:selectOneMenu>
<h:outputLabel for="skl_lst_experience" value="#{msg.experience_level}" />
<t:selectOneMenu id="skl_lst_experience" value="#{employeesController.experienceSelectedItem}" >
<c:selectItems value="#{employeesController.itemsExperiences}" />
</t:selectOneMenu>
<h:outputLabel for="skl_txt_precision" value="#{msg.experience_precision}" />
<h:inputText id="skl_txt_precision" value="" />
<a4j:commandButton id="btt_editSkillEmployee" action="#{employeesController.createEmployeeSkillAction}" value="#{msg.employee_action_update}" reRender="a4jskill" />
</h:panelGrid>
<a4j:outputPanel id="a4jskill" >
<h:panelGrid>
<t:dataTable id="gridSkill" border="1" cellspacing="0" cellpadding="0" value="#{employeesController.employeeSkills}" var="itemEmployeeSkill" sortable="true" rowClasses="tableRow1,tableRow2" rowOnMouseOver="">
<h:column>
<c:facet name="header">
<h:outputText value="#{msg.experience_domain}" />
</c:facet>
<h:outputText value="#{itemEmployeeSkill.skill.domain.domainLabel}" />
</h:column>
<h:column>
<c:facet name="header">
<h:outputText value="#{msg.experience_skill}" />
</c:facet>
<h:outputText value="#{itemEmployeeSkill.skill.skillLabel}" />
</h:column>
<h:column>
<c:facet name="header">
<h:outputText value="#{msg.experience_level}" />
</c:facet>
<h:outputText value="#{itemEmployeeSkill.experience.label}" />
</h:column>
<h:column>
<c:facet name="header">
<h:outputText value="" />
</c:facet>
<h:commandLink action="#{employeesController.deleteEmployeeSkillAction}">
<c:param value="#{itemEmployeeSkill.id}" name="employeeSkillId" />
<h:graphicImage style="border: 0" id="image1" value="/web/images/delete.png" width="15" height="15" />
</h:commandLink>
<c:verbatim> </c:verbatim>
</h:column>
</t:dataTable>
</h:panelGrid>
</a4j:outputPanel>
</t:panelTab>
</t:panelTabbedPane>
</h:form>
</c:subview> |
Managed Bean (employeesContorller)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| /** Methode chargee de creer une competence employe
* * @return Cle de navigation (outcome) definissant le prochain ecran (view)
* a afficher en fonction de la reussite/echec de l'action*/
public String createEmployeeSkillAction() {
log.debug("createEmployeeSkillAction()");
if (experienceSelectedItem == null || skillSelectedItem == null) {
log.debug("createEmployeeSkillAction() > item(s) null : experienceSelectedItem="+experienceSelectedItem+" | skillSelectedItem="+skillSelectedItem);
return "warn";
}
try {
int employeeId=this.displayedEmployee.getId();
int experienceId=Integer.valueOf(experienceSelectedItem);
int skillId=Integer.valueOf(skillSelectedItem);
log.debug("createEmployeeSkillAction() > Employee id ="+ employeeId + " - Experience id=" + experienceId + " - Skill Id" + skillId);
// Recuperation des objets selectionnees dans les listes deroulantes
Experience createdExperience = experienceService.getExperience(experienceId);
Skill createdSkilm = skillService.getSkill(skillId);
// Sauvegarde objet EmployeeSkill (Competences Employes) manipule
displayedEmployeeSkill = new EmployeeSkill();
displayedEmployeeSkill.setEmployeeId(employeeId);
displayedEmployeeSkill.setExperience(createdExperience);
displayedEmployeeSkill.setSkill(createdSkilm);
this.employeeSkillService.saveEmployeeSkill(this.displayedEmployeeSkill);
addInfoMessageInContext("createOK","Competence Collaborateur :","Creation effectue avec succes");
getEmployeeSkills();
return "success";
} catch (Exception e) {
e.printStackTrace();
return "failure";
}
}
/** Methode chargee de retourner une collection
* contenant l'ensemble des competences
* de l'employe manipule dans l'IHM.
* @return Collection d'objet EmployeeSkill correspondant e ll'ensemble des competences de l'employe manipule dans l'IHM */
public Collection <EmployeeSkill> getEmployeeSkills() {
employeeSkills = displayedEmployee.getSkills();
return employeeSkills;
} |
Fichier Managed Bean XML
Code:
1 2 3 4 5 6 7 8 9 10
|
<managed-bean>
<description>
Bean managée relatif à la classe Controller Employees.
</description>
<managed-bean-name>employeesController</managed-bean-name>
<managed-bean-class>
com.gesco.web.controllers.EmployeesController
</managed-bean-class>
</managed-bean> |
Fichier web.xml
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>server</param-value>
</context-param>
<context-param>
<param-name>
org.apache.myfaces.NUMBER_OF_VIEWS_IN_SESSION
</param-name>
<param-value>7</param-value>
<description>
Only applicable if state saving method is "server" (=
default). Defines the amount (default = 20) of the latest
views are stored in session.
</description>
</context-param>
<context-param>
<param-name>org.apache.myfaces.COMPRESS_STATE_IN_SESSION</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>
org.apache.myfaces.SERIALIZE_STATE_IN_SESSION
</param-name>
<param-value>false</param-value>
</context-param> |
MERCI DE VOTRE AIDE PRECIEUSE :ccool::ccool::ccool::ccool: