8 Replies Latest reply on Dec 16, 2009 7:58 PM by yyq2009

    Render problem of jsf 2.0

    yyq2009

         I just want to rerender a tag(h:outputText) when I click one cell of a datatable using jsf 2.0, but my test showed me some error like that the tag id i set to be rerendered is not in the context of the cell tag.

           my code is following:

      index.xhtml

       

      <?xml version='1.0' encoding='UTF-8' ?>
      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      <html xmlns="http://www.w3.org/1999/xhtml"
            xmlns:h="http://java.sun.com/jsf/html"
            xmlns:f="http://java.sun.com/jsf/core"
            >
          <h:head>
              <title>Facelet Title</title>
              <h:outputScript target="header" name="jquery.js" library="js"/>
              <script type="text/javascript">
      function showStatus(event) {
         $("#status").text(event.status);
      }
              </script>
          </h:head>
          <h:body>
              <h:form id="form1" prependId="false">
                  <h:dataTable id="table" value="#{TestBean.allUsers}" var="u">
                      <h:column>
                          <f:facet name="header">
                              <h:outputLabel value="Name"/>
                          </f:facet>
                          <h:outputLabel value="#{u.name}">
                              <f:ajax event="click" listener="#{TestBean.show(u)}" onevent="showStatus" render="out1"/>
                          </h:outputLabel>
                      </h:column>
                  </h:dataTable>
              </h:form>
              <h:outputText id="out1" value="#{TestBean.user.name}"/>
              <div id="status"></div>
          </h:body>
      </html>
      

       

      my test bean is:

      TestBean.java

       

      @ManagedBean(name="TestBean")
      @RequestScoped
      public class TestBean {
       private User user;
       private List<User> list;
          /** Creates a new instance of TestBean */
          public TestBean() {
          }
      
       public List<User> getAllUsers(){
              list = new ArrayList<User>();
              for (int i = 0; i < 10; i++) {
                 list.add(new User("Name"+(i+1),18+i,"DV"+(i+1)));
              }
              return list;
          }
          public void show(User user){
              System.out.println("User nam is "+user.getName());
              this.user = user;
          }
          public User getUser() {
              return user;
          }
          public void setUser(User user) {
              this.user = user;
          }
      
      


      <f:ajax event="click" listener="#{TestBean.show(u)}" onevent="showStatus" render="out1"/>

      The error appeared in this line.

      if I change render value to "@all" it works, but I just want to render the only one tag, why  must I set the render value "@all"?

      Any suggestions?

      Thanks in advance.