JSF, recalls datatable on POST

Hi,
Here is the test codes:
This is my simple managed bean:
public class Sample {
  public String getText() {
    System.out.println("this is text");
    return "this is text";
  public String[] getData() {
    System.out.println("this is data");
    return new String[] {
      "deneme1",
      "deneme2"
  public String SampleAction() {
    return "sample";
This is web page:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  "http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <title>JSP Page</title>
  </head>
  <body>
    <h:dataTable var="d" border="1" value="#{sample.data}">
      <h:column>
        <h:outputText value="#{d}" />
      </h:column>
    </h:dataTable>
    <h:form>
      <h:outputText value="#{sample.text}" />
      <h:commandButton action="#{sample.SampleAction}" value="click" />
    </h:form>
  </body>
</html>----------------------------------
and this is faces config:
  <navigation-rule>
    <navigation-case>
      <from-outcome>sample</from-outcome>
      <to-view-id>sample.jsf</to-view-id>
    </navigation-case>
  </navigation-rule>
  <managed-bean>
    <managed-bean-name>sample</managed-bean-name>
    <managed-bean-class>Sample</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
  </managed-bean>----------------------------------
When we call http://localhost:8080/index.jsf. The server output is:
this is text
this is data
Another word JSF calls datatable #{sample.data} and #{sample.text}.this normal.
But when we click the button. The Server output is:
this is data
is this a possible bug? How may i avoid of reloading datatable content.

A Response from MyFaces List:
hi,
that's a given behaviour. generally spoken: you don't know how often a component invokes your getter methods. you will find a lot of possible solutions.
e.g. there is a myfaces sub-project which provides a solution (the view-controller provided by orchestra [1]).
(or you use javax.faces.event.PreRenderViewEvent of jsf 2.0)
regards,
gerhard
[1] http://myfaces.apache.org/orchestra/myfaces-orchestra-core15/ViewControllerAnnotations.html
Gerhard Petracek

Similar Messages

  • BUG JSF h:dataTable with JDBC ResultSet - only last column is updated

    I tried to create updatable h:dataTable tag with three h:inputText columns with JDBC ResultSet as data source. But what ever I did I have seceded to update only the last column in h:dataTable tag.
    My JSF page is:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
    <%@ page contentType="text/html;charset=windows-1250"%>
    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
    <f:view>
    <html>
    <head>
    <meta http-equiv="Content-Type"
    content="text/html; charset=windows-1250"/>
    <title>Stevan</title>
    </head>
    <body><h:form>
    <p>
    <h:messages/>
    </p>
    <p>
    <h:dataTable value="#{tabela.people}" var = "record">
    <h:column>
    <f:facet name="header">
    <h:outputText value="PIN"/>
    </f:facet>
    <h:inputText value="#{record.PIN}"/>
    </h:column>
    <h:column>
    <f:facet name="header">
    <h:outputText value="Surname"/>
    </f:facet>
    <h:inputText value="#{record.SURNAME}"/>
    </h:column>
    <h:column>
    <f:facet name="header">
    <h:outputText value="Name"/>
    </f:facet>
    <h:inputText value="#{record.NAME}"/>
    </h:column>
    </h:dataTable>
    </p>
    <h:commandButton value="Submit"/>
    </h:form></body>
    </html>
    </f:view>
    My java been is:
    package com.steva;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    public class tabela {
    private Connection conn;
    private ResultSet resultSet;
    public tabela() throws SQLException, ClassNotFoundException {
    Statement stmt;
    Class.forName("oracle.jdbc.OracleDriver");
    conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "hr", "hr");
    stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
    resultSet = stmt.executeQuery("SELECT PIN, SURNAME, NAME FROM PERSON");
    public ResultSet getPeople() {
    return resultSet;
    I have instaled “Oracle Database 10g Express Edition Release 10.2.0.1.0” – product on my PC localy. I have enabled HR schema and I have instaled and pupulated with sample data folloving table:
    CREATE TABLE "PERSON"
    (     "PIN" VARCHAR2(20) NOT NULL ENABLE,
         "SURNAME" VARCHAR2(30),
         "NAME" VARCHAR2(30),
         CONSTRAINT "PERSON_PK" PRIMARY KEY ("PIN") ENABLE
    I have:
    Windows XP SP2
    Oracle JDeveloper Studio Edition Version 10.1.3.1.0.3894
    I am not shure why this works in that way, but I think that this is a BUG
    Thanks in advance.

    Hi,
    I am sorry because of formatting but while I am entering text looks fine but in preview it is all scrambled. I was looking on the Web for similar problems and I did not find anything similar. Its very simple sample and I could not believe that the problem is in SUN JSF library. I was thinking that problem is in some ResultSet parameter or in some specific Oracle implementation of JDBC thin driver. I did not try this sample on any other platform, database or programming tool. I am new in Java and JSF and I have some experience only with JDeveloper.
    Java been(session scope):
    package com.steva;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    public class tabela {
    private Connection conn;
    private ResultSet resultSet;
    public tabela() throws SQLException, ClassNotFoundException {
    Statement stmt;
    Class.forName("oracle.jdbc.OracleDriver");
    conn = DriverManager.getConnection
    ("jdbc:oracle:thin:@localhost:1521:xe", "hr", "hr");
    stmt = conn.createStatement
    (ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
    resultSet = stmt.executeQuery("SELECT PIN, SURNAME, NAME FROM PERSON");
    public ResultSet getZaposleni() {
    return resultSet;
    JSF Page:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
    <%@ page contentType="text/html;charset=windows-1250"%>
    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
    <f:view>
    <html>
    <head>
    <meta http-equiv="Content-Type"
    content="text/html; charset=windows-1250"/>
    <title>Stevan</title>
    </head>
    <body><h:form>
    <p>
    <h:messages/>
    </p>
    <p>
    <h:dataTable value="#{tabela.zaposleni}" var = "record">
    <h:column>
    <f:facet name="header">
    <h:outputText value="PIN"/>
    </f:facet>
    <h:inputText value="#{record.PIN}"/>
    </h:column>
    <h:column>
    <f:facet name="header">
    <h:outputText value="Surname"/>
    </f:facet>
    <h:inputText value="#{record.SURNAME}"/>
    </h:column>
    <h:column>
    <f:facet name="header">
    <h:outputText value="Name"/>
    </f:facet>
    <h:inputText value="#{record.NAME}"/>
    </h:column>
    </h:dataTable>
    </p>
    <h:commandButton value="Submit"/>
    </h:form></body>
    </html>
    </f:view>

  • Problems in JSF t:dataTable /t:dataTable

    hi
    i am using <t:dataTable> to create jsf table.In the datatable each column has one <h:commandLink>.i had action methods to each and every column.At the same Jsf page,i am having some textfields using <h:inputText>.
    My problem is when i click the datatable colume link,it goes to the same jsf page,but there is no textfields at the same page.i am not expected to same jsf page.i wants to navigate to some other jsf pages.i had one solution i.e,i used binding method for each and every Link.The problem was solved temporarly.eventhough i am having solution using binding method.it is not applicable for huge data as i have large data.so what should i do to have exact solution .At the same time,i don't need binding methods.
    Advance thanks
    rgds
    OasisDeserts

    Hi.
    J solve the problem partly and here is the problem and solution:
    Problem - JDeveloper 10.1.3 have problem in showing table when code look like this:
    <h:dataTable width="350" value="#{infoBean.popular}" var="popular_">
    <h:column>
    <f:facet name="header">
    <h:panelGroup>
    <h:commandLink action="POPULAR">
    <h:outputText value="Najpopularnije"/>
    </h:commandLink>
    </h:panelGroup>
    </f:facet>
    <h:commandLink>
    <h:outputText value="#{popular_}" converter="ProductTitle"/>
    </h:commandLink>
    </h:column>
    </h:dataTable>
    Solution - When J change code to this 'Design' tab shows the table but not the text in 'outputText'(here #{popular_}):
    <h:outputText value="#{popular_}">
    <f:converter converterId="ProductTitle"/>
    </h:outputText>
    Please try this!

  • JDeveloper Toplink + JSF Editable datatable

    Hi to all,
    is it possible to make and aditable datatable (from database) using Toplink + JSF JSP pages?
    is there a valid tutorial tha explain it?
    Thanks to all
    Emanuele

    what part are you "not getting" exactly? How to react to a button press? How to save something in the database?

  • JSF Nested Datatable , ValueExpression

    Hi, I'm working on an application which is going to use a nested datatable.
    basically I generate 1 datatable which consist of 7 columns , 5 rowsItems and for each column I generate a datatable to handle the data.
    I make a List from RowItems and bind it to my datatable by wrapping it in a datamodel
    the rowItem class consist of 7 List for each column which will be binded to each nested datatable using ValueExpression
    So now the problem is:
    I couldnt get the name for each display, I'm getting error message could not find property "name" for class String.
    output_name.setValueExpression("value", createValueExpression("#{displaycolVar.name}", String.class));but I can get the working unit displayed correctly
    output_workingunit.setValueExpression("value", createValueExpression("#{RowItemsVar.workingtime}", String.class));can someone help me on this problem?
    Thanks in advance
    my code
    calendar.java
    package demo;
    import java.util.ArrayList;
    import javax.el.ValueExpression;
    import javax.faces.component.UIOutput;
    import javax.faces.component.html.HtmlOutputText;
    import javax.faces.context.FacesContext;
    import javax.faces.model.ListDataModel;
    import org.ajax4jsf.org.w3c.tidy.TagTable;
    import org.richfaces.component.*;
    import org.richfaces.component.html.HtmlDataTable;
    import org.richfaces.component.html.HtmlColumn;
    public class Calendar
         // Table Properties
         private String[] days = {"Working Time","Monday","Tuesday","Wednesday","Thursday","Freiday","Saturday","Sunday"};
         private String[] workingunit = {"8:00-8:45","8:45-9:30","9:30-10:15","10:15-11:00","11:00-11:45"};
         private int column; // number of columns
         private int row; // number of rows
         // Main List to store the values
         private ArrayList<RowItems> RowItemList;
         // Datatable backing bean Component
         private UIDataTable calendarDatatable;
         // Constructor
         public Calendar()
              // Initializing row and column
              column = 7;
              row = 5;
              // Initializing Datatable
              calendarDatatable = new HtmlDataTable();
              calendarDatatable.setVar("RowItemsVar");
              calendarDatatable.setRendered(true);
              // Creating List of RowItems
              RowItemList = new ArrayList<RowItems>();
              // Adding rows to the List
              for(int i = 0;i<row;i++)
                   RowItemList.add(new RowItems(workingunit,column,i));
              // Creating creating 7 columns for each day + name column
              for(int i = 0; i <column+1; i++)
                   UIColumn column = new HtmlColumn();
                   UIOutput header = new HtmlOutputText();
                   // Initializing column and header
                   header.setValue(days[i]);
                   column.setHeader(header);
                   // the first column doesn't need a datatable
                   if(i == 0)
                        // Display data
                        HtmlOutputText output_workingunit = new HtmlOutputText();
                        output_workingunit.setValueExpression("value", createValueExpression("#{RowItemsVar.workingtime}", String.class));
                        column.getChildren().add(output_workingunit);
                        System.out.println("\n"+output_workingunit.getValueExpression("value"));
                   else      
                        // Create datatable for each column
                        UIDataTable datatable_nested = new HtmlDataTable();
                        datatable_nested.setVar("displaycolVar");               
                        datatable_nested.setRendered(true);
                        UIColumn column_for_nestedDT = new HtmlColumn();
                        // Display data
                        HtmlOutputText output_name = new HtmlOutputText();
                        output_name.setValueExpression("value", createValueExpression("#{displaycolVar.name}", String.class)); // <- it wont just find the property
                        // add outputtext for each column in nested datatable
                        column_for_nestedDT.getChildren().add(output_name);
                        // Add a column for each nested datatable
                        datatable_nested.getChildren().add(column_for_nestedDT);
                        * the expression value is correct I checked through println
                        switch(i)
                             case 1: datatable_nested.setValueExpression("value", createValueExpression("#{RowItemsVar.displaylist_col1}", String.class));
                                       break;
                             case 2:     datatable_nested.setValueExpression("value", createValueExpression("#{RowItemsVar.displaylist_col2}", String.class));
                                       break;
                             case 3:     datatable_nested.setValueExpression("value", createValueExpression("#{RowItemsVar.displaylist_col3}", String.class));
                                       break;               
                             case 4:     datatable_nested.setValueExpression("value", createValueExpression("#{RowItemsVar.displaylist_col4}", String.class));
                                       break;
                             case 5:     datatable_nested.setValueExpression("value", createValueExpression("#{RowItemsVar.displaylist_col5}", String.class));
                                       break;
                             case 6: datatable_nested.setValueExpression("value", createValueExpression("#{RowItemsVar.displaylist_col6}", String.class));
                                       break;
                             case 7:     datatable_nested.setValueExpression("value", createValueExpression("#{RowItemsVar.displaylist_col7}", String.class));
                                       break;                    
                        // Add the nested datatable to each column
                        column.getChildren().add(datatable_nested);
                   // Adding each column to highest entity of datatable
                   // 7 column will be added because there is 7 datatable
                   calendarDatatable.getChildren().add(column);
              // Test data
              RowItemList.get(0).getDisplaylist_col1().add(new Display("danny",1,1));
              // Datamodel for the highest entity of datatable
              ListDataModel<RowItems>RowItemsDM = new ListDataModel<RowItems>();
              // Wrapp the data from ArrayList into DataModel object
              RowItemsDM.setWrappedData(RowItemList);
              // Adding datamodel to highest entity of datatable
              calendarDatatable.setValue(RowItemsDM);
         public UIDataTable getCalendarDatatable() {
              return calendarDatatable;
         public void setCalendarDatatable(UIDataTable calendarDatatable) {
              this.calendarDatatable = calendarDatatable;
    // Methode to create a ValueExpression
    private ValueExpression createValueExpression(String valueExpression, Class<?> valueType)
    FacesContext facesContext = FacesContext.getCurrentInstance();
    return facesContext.getApplication().getExpressionFactory().createValueExpression(
    facesContext.getELContext(), valueExpression, valueType);

    RowItems.java
    package demo;
    import java.util.ArrayList;
    * Class to represent each column
    public class RowItems
         private String workingtime;
         private int col;
         private int index;
         // List of list for each column     
         private ArrayList<Display> displaylist_col1 = new ArrayList<Display>();
         private ArrayList<Display> displaylist_col2 = new ArrayList<Display>();
         private ArrayList<Display> displaylist_col3 = new ArrayList<Display>();
         private ArrayList<Display> displaylist_col4 = new ArrayList<Display>();
         private ArrayList<Display> displaylist_col5 = new ArrayList<Display>();
         private ArrayList<Display> displaylist_col6 = new ArrayList<Display>();
         private ArrayList<Display> displaylist_col7 = new ArrayList<Display>();
         // Constructor
         public RowItems (String workingtime, int col, int index)
              this.workingtime = workingtime;
              this.col = col;
              this.index = index;
         // Getter & Setter
         public String getWorkingtime() {
              return workingtime;
         public void setWorkingtime(String workingtime) {
              this.workingtime = workingtime;
         public int getCol() {
              return col;
         public void setCol(int col) {
              this.col = col;
         public void setIndex(int index) {
              this.index = index;
         public int getIndex() {
              return index;
         public ArrayList<Display> getDisplaylist_col1() {
              return displaylist_col1;
         public void setDisplaylist_col1(ArrayList<Display> displaylist_col1) {
              this.displaylist_col1 = displaylist_col1;
         public ArrayList<Display> getDisplaylist_col2() {
              return displaylist_col2;
         public void setDisplaylist_col2(ArrayList<Display> displaylist_col2) {
              this.displaylist_col2 = displaylist_col2;
         public ArrayList<Display> getDisplaylist_col3() {
              return displaylist_col3;
         public void setDisplaylist_col3(ArrayList<Display> displaylist_col3) {
              this.displaylist_col3 = displaylist_col3;
         public ArrayList<Display> getDisplaylist_col4() {
              return displaylist_col4;
         public void setDisplaylist_col4(ArrayList<Display> displaylist_col4) {
              this.displaylist_col4 = displaylist_col4;
         public ArrayList<Display> getDisplaylist_col5() {
              return displaylist_col5;
         public void setDisplaylist_col5(ArrayList<Display> displaylist_col5) {
              this.displaylist_col5 = displaylist_col5;
         public ArrayList<Display> getDisplaylist_col6() {
              return displaylist_col6;
         public void setDisplaylist_col6(ArrayList<Display> displaylist_col6) {
              this.displaylist_col6 = displaylist_col6;
         public ArrayList<Display> getDisplaylist_col7() {
              return displaylist_col7;
         public void setDisplaylist_col7(ArrayList<Display> displaylist_col7) {
              this.displaylist_col7 = displaylist_col7;
    }display.java
    package demo;
    public class Display
         private Person person;
         private String name;
         private int x;
         private int y;
         public Display(String name, int x, int y)
              this.person = new Person(name);
              this.name = name;
              this.x = x;
              this.y = y;
         public String getName() {
              return name;
         public void setName(String name) {
              this.name = name;
         public Person getPerson() {
              return person;
         public void setPerson(Person person) {
              this.person = person;
         public int getX() {
              return x;
         public void setX(int x) {
              this.x = x;
         public int getY() {
              return y;
         public void setY(int y) {
              this.y = y;
    }

  • Jsf dynamic datatable

    Hi
    How can we make the columns of a datatable dynamic, I mean without knowing the numbers columns of the list to present in the datatable?
    thanks for help

    Yep, just build the h:columns inside a repeat tag that gets evaluated at the right time, like c:foreach.

  • JSF h:dataTable Example

    Can anyone please supply a link so that I can attempt to get working dataTable in my application.
    I have found that the examples given in the J2EE 1.4 Tutorial does not work for me.
    To be clear I had created a List, added a bean "Student" with a property called name
    From a jsp page I did this:
                <h:form>
                    <h:dataTable border="1" value="#{StudentBean.students}" >
                        <h:column>
                            <f:facet name="header" >
                                <h:outputText value="#{StudentBean.students.name}" />
                            </f:facet>
                        </h:column>
                    </h:dataTable>                                              
                </h:form>
            </f:view>
    import java.util.ArrayList;
    import java.util.List;
    import org.polaris.business.logic.Student;
    import org.polaris.database.DatabaseConnection;
    * @author john
    public class StudentBean extends DatabaseConnection {
        private List students = new ArrayList();
        /** Creates a new instance of StudentBean */
        public StudentBean() {
            Student student = new Student();
            student.setName("Doe, John");
            students.add(student);
            student.setName("Doe, Jane");
            students.add(student);       
        public List getStudents() {              
            return this.students;
        public void setStudents(List students) {
            this.students = students;
    }Anyhow, I do not get a list like :
    Doe, John
    Doe, Jane
    and I cannot figure out whhy???
    Any good link would be most welcome as I have spent 2 days trying to solve this simple problem.
    Thanks

    Try as follows:<f:view>
      <h:form>
        <:dataTable border="1" value="#{StudentBean.students}"  var="line">
          <h:column>
            <h:outputText value="#{line.name}" />
          </h:column>
        </h:dataTable>                                              
      </h:form>
      <h:messages/>
    </f:view>P.S. You don't need setStudents().

  • DataTable in dataTable fix details (JSF 1.1)

    I posted a message yesterday indicating that some of the problems with nested dataTables had not been fixed in the JSF 1.1 release. Since that posting, I have done some more research, and have more specific information regarding the remaining problems and a way to fix them. The remaining problems are:
    1) Values from inputText fields in the inner dataTable are ignored on submit (except for the last row of the table). The problem is that processDecodes is called on the inner table component multiple times (once per row of the outer table), and the "saved = new HashMap();" statement effectively wipes out any values that were decoded from the previous row, so that at the end of the process, the only decoded values that remain are those from the last row. My suggested fix for that problem is:
    a) to create a "boolean isOuterTable()" method on UIData that determines whether or not this table is the outermost table (i.e. go up through the parent chain and see if there are any UIData ancestors).
    b) create a "clearSaved" method on UIData as follows:
    protected void clearSaved() {
        saved = new HashMap();
    }c) create a "clearDescendants" method on UIData that goes visits all of the UIData's descendants (i.e. facets and children, and their facets and children, recursively), and calls clearSaved on any UIData components that are found
    d) in the processDecodes method for UIData, replace:
    saved = new HashMap();with
    if (isOuterTable()) {
        clearSaved();
        clearDescendants();
    }2) When a commandButton in the inner dataTable is clicked, actions are fired for all rows of the outer dataTable. This is one case of a larger problem. The implementation of getClientId in UIComponentBase uses a cached value, if the ID has been computed previously. For components within dataTables, this is a problem because these components are referenced multiple times for different rows of the outer table, and the row number of the outer table is part of the client ID. To fix this, I suggest the following (maybe overkill, but it works):
    a) Create a "clearCachedValues" method on UIData, which visits all of the UIData's descendants, and sets their clientId to null. A hack to do this is:
    descendant.setId(descendant.getId())It would be better to have a method on UIComponent for this. NOTE: I have also found that if I come across a descendant that is a UIData, I also need to set that component's "model" attribute to null, because the calculation of this model refers to that dataTable's value valueBinding, which may be defined in terms of the current row of the outer table.
    b) Add a call to clearCachedValues to the end of the setRowIndex method on UIData.
    There may be other, better ways to fix these problems, but I thought it might be helpful to describe my fixes in detail, so that whoever is responsible for fixing the reference implementation can at least have the benefit of my research.
    I would like to see a bug opened for these problems, and I would like to be able to see the descriptions of known JSF bugs. Before JSF 1.1 came out I was worried that the nested dataTables bug (C026) description (which I was unable to find) might not be complete, and that as a result, the problems with nested dataTables would not be completely fixed in JSF 1.1. As it turned out my worries were not unfounded.

    JD> 2) When a commandButton in the inner dataTable is clicked, actions
    JD> are fired for all rows of the outer dataTable. This is one case of a
    JD> larger problem. The implementation of getClientId in UIComponentBase
    JD> uses a cached value, if the ID has been computed previously. For
    JD> components within dataTables, this is a problem because these
    JD> components are referenced multiple times for different rows of the
    JD> outer table, and the row number of the outer table is part of the
    JD> client ID. To fix this, I suggest the following (maybe overkill, but
    JD> it works):
    I've fixed part 1). I've essentially done as you suggested.
    I can't reproduce part 2). I've posted the webapp where I try to do
    this at
    http://blogs.sun.com/roller/resources/edburns/jsf-nested-datatables.war
    Please put the JSF 1.1 jars in common lib, or WEB-INF/lib in this war
    and then visit
    http://host:port/jsf-nested-datatables/faces/test2.jsp
    Click on the outer buttons, you'll see that the outer listener fires
    once.
    Click on the inner buttons, you'll see that the inner listener once.
    Can you please help me reproduce this?
    Ed

  • Need Help with my JSF-Project - ResultSet to List to DataTable/c:foreach

    Hello!
    I am struggeling heavily with JSF and JSTL and JSPs...
    I want to show a list of names from a database in my JSF-Document.
    I have the following bean "Category":
    package de.fh_offenburg.audiodb.webapp;
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.Statement;
    import java.util.ArrayList;
    import java.util.List;
    import javax.servlet.jsp.jstl.sql.Result;
    public class Category {
         String name = "";
         String creationDate = "";
         int id_kategorie = 0;
         ResultSet resultset;
         Result result;
         Connection con;
         String query = "";
         List result_list;
         Category() {
              result_list = new ArrayList();
              try{
                   con = new ConnectDB().connect();
                   Statement statement = con.createStatement();
                   query = "SELECT * FROM Category WHERE isUKat = '0'";
                   resultset = statement.executeQuery(query);
                   while (resultset.next()) {
                     // Get the data from the row using the column index
                     String name = resultset.getString("name");
                     // create an object for each row (yes, it is hibernate biased) ;-)
                     Cat cat = new Cat();
                     cat.setName(name);
                     cat.setId_kategorie(id_kategorie);
                     // Add the object to the list
                     result_list.add(cat);
              } catch(Exception hcat){
                   System.out.println("HCat-Problem: "+hcat.getMessage());
         public java.lang.String getCreationDate() {
              return creationDate;
         public void setCreationDate(java.lang.String creationDate) {
              this.creationDate = creationDate;
         public int getId_kategorie() {
              return id_kategorie;
         public void setId_kategorie(int id_kategorie) {
              this.id_kategorie = id_kategorie;
         public java.lang.String getName() {
              return name;
         public void setName(java.lang.String name) {
              this.name = name;
         public java.sql.ResultSet getResultset() {
              return resultset;
         public void setResult_cat(java.sql.ResultSet result_cat) {
              this.resultset = result_cat;
         public void setResult(Result result) {
              this.result = result;
         public Result getResult() {
              return result;
         public List getResult_list() {
              return result_list;
         public void setResult_list(ArrayList result_list) {
              this.result_list = result_list;
         }This Bean is registered in my faces-config.xml like this:
    <managed-bean>
      <managed-bean-name>category</managed-bean-name>
      <managed-bean-class>de.fh_offenburg.audiodb.webapp.Category</managed-bean-class>
      <managed-bean-scope>application</managed-bean-scope>
      <managed-property>
       <property-name>creationDate</property-name>
       <property-class>java.lang.String</property-class>
       <value/>
      </managed-property>
      <managed-property>
       <property-name>id_kategorie</property-name>
       <property-class>int</property-class>
       <value/>
      </managed-property>
      <managed-property>
       <property-name>name</property-name>
       <property-class>java.lang.String</property-class>
       <value/>
      </managed-property>
      <managed-property id="result">
       <property-name>result</property-name>
       <property-class>javax.servlet.jsp.jstl.sql.Result</property-class>
       <value/>
      </managed-property>
      <managed-property id="resultset">
       <property-name>resultset</property-name>
       <property-class>java.sql.ResultSet</property-class>
       <value/>
      </managed-property>
      <managed-property id="result_list">
       <property-name>result_list</property-name>
       <property-class>java.util.List</property-class>
       <value/>
      </managed-property>
    </managed-bean>Now I try to read the list of Cats out in my JSF:
                                                      <h:dataTable value="#{category.result_list}" var="result">
                                                           <h:column>
                                                                          <h:outputText value="#{result.name}" />
                                                           </h:column>
                                                      </h:dataTable>... but that doesnt work... I got an error:
    javax.servlet.ServletException: Cannot get value for expression '#{category.result_list}'
         javax.faces.webapp.FacesServlet.service(FacesServlet.java:152)
         org.ajax4jsf.framework.ajax.xmlfilter.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:96)
         org.ajax4jsf.framework.ajax.xmlfilter.BaseFilter.doFilter(BaseFilter.java:220)
         org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:144)
    root cause So what am I doing wrong?
    I did try to do the same with an JSTL-Syntax (which would be better for me, because I want to layout with DIVs not with a Table...):
                                                      <c:forEach items="#{category.result_list}" var="result">
                                                           <div class="div_mini_kat"><c:out value="#{result.name}"/></div>
                                                      </c:forEach>But that doesnt work out neigther...
    Could someone please tell me what I am doing wrong? I am trying this for days now and I am feeling like a bumble-bee in a glasshouse with one small open doorway which I dont see and thousands of m^2 to crash with...
    Thanks to everyone who answers in advance!!!
    Fuchur

    Hello!
    I am struggeling heavily with JSF and JSTL and JSPs...
    I want to show a list of names from a database in my JSF-Document.
    I have the following bean "Category":
    package de.fh_offenburg.audiodb.webapp;
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.Statement;
    import java.util.ArrayList;
    import java.util.List;
    import javax.servlet.jsp.jstl.sql.Result;
    public class Category {
         String name = "";
         String creationDate = "";
         int id_kategorie = 0;
         ResultSet resultset;
         Result result;
         Connection con;
         String query = "";
         List result_list;
         Category() {
              result_list = new ArrayList();
              try{
                   con = new ConnectDB().connect();
                   Statement statement = con.createStatement();
                   query = "SELECT * FROM Category WHERE isUKat = '0'";
                   resultset = statement.executeQuery(query);
                   while (resultset.next()) {
                     // Get the data from the row using the column index
                     String name = resultset.getString("name");
                     // create an object for each row (yes, it is hibernate biased) ;-)
                     Cat cat = new Cat();
                     cat.setName(name);
                     cat.setId_kategorie(id_kategorie);
                     // Add the object to the list
                     result_list.add(cat);
              } catch(Exception hcat){
                   System.out.println("HCat-Problem: "+hcat.getMessage());
         public java.lang.String getCreationDate() {
              return creationDate;
         public void setCreationDate(java.lang.String creationDate) {
              this.creationDate = creationDate;
         public int getId_kategorie() {
              return id_kategorie;
         public void setId_kategorie(int id_kategorie) {
              this.id_kategorie = id_kategorie;
         public java.lang.String getName() {
              return name;
         public void setName(java.lang.String name) {
              this.name = name;
         public java.sql.ResultSet getResultset() {
              return resultset;
         public void setResult_cat(java.sql.ResultSet result_cat) {
              this.resultset = result_cat;
         public void setResult(Result result) {
              this.result = result;
         public Result getResult() {
              return result;
         public List getResult_list() {
              return result_list;
         public void setResult_list(ArrayList result_list) {
              this.result_list = result_list;
         }This Bean is registered in my faces-config.xml like this:
    <managed-bean>
      <managed-bean-name>category</managed-bean-name>
      <managed-bean-class>de.fh_offenburg.audiodb.webapp.Category</managed-bean-class>
      <managed-bean-scope>application</managed-bean-scope>
      <managed-property>
       <property-name>creationDate</property-name>
       <property-class>java.lang.String</property-class>
       <value/>
      </managed-property>
      <managed-property>
       <property-name>id_kategorie</property-name>
       <property-class>int</property-class>
       <value/>
      </managed-property>
      <managed-property>
       <property-name>name</property-name>
       <property-class>java.lang.String</property-class>
       <value/>
      </managed-property>
      <managed-property id="result">
       <property-name>result</property-name>
       <property-class>javax.servlet.jsp.jstl.sql.Result</property-class>
       <value/>
      </managed-property>
      <managed-property id="resultset">
       <property-name>resultset</property-name>
       <property-class>java.sql.ResultSet</property-class>
       <value/>
      </managed-property>
      <managed-property id="result_list">
       <property-name>result_list</property-name>
       <property-class>java.util.List</property-class>
       <value/>
      </managed-property>
    </managed-bean>Now I try to read the list of Cats out in my JSF:
                                                      <h:dataTable value="#{category.result_list}" var="result">
                                                           <h:column>
                                                                          <h:outputText value="#{result.name}" />
                                                           </h:column>
                                                      </h:dataTable>... but that doesnt work... I got an error:
    javax.servlet.ServletException: Cannot get value for expression '#{category.result_list}'
         javax.faces.webapp.FacesServlet.service(FacesServlet.java:152)
         org.ajax4jsf.framework.ajax.xmlfilter.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:96)
         org.ajax4jsf.framework.ajax.xmlfilter.BaseFilter.doFilter(BaseFilter.java:220)
         org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:144)
    root cause So what am I doing wrong?
    I did try to do the same with an JSTL-Syntax (which would be better for me, because I want to layout with DIVs not with a Table...):
                                                      <c:forEach items="#{category.result_list}" var="result">
                                                           <div class="div_mini_kat"><c:out value="#{result.name}"/></div>
                                                      </c:forEach>But that doesnt work out neigther...
    Could someone please tell me what I am doing wrong? I am trying this for days now and I am feeling like a bumble-bee in a glasshouse with one small open doorway which I dont see and thousands of m^2 to crash with...
    Thanks to everyone who answers in advance!!!
    Fuchur

  • Custom/ Extended DataTable Design

    Hi,
    I need to develop an Extended datatable component based on existing Sun JSF h:dataTable component.
    The following features are needed for table ( And may be all these should be configurable as well):
    1.Column Sorting
    2.Select All Checkbox Coulmn
    3.Pagination-It should display records range in a drop-down
    4. A button panel bar which would do ADD/EDIT/Delete/refersh etc..
    I am able to do all of these but not in a generic way. Like I have a seperate Button bar( made of htmlCommandButtons) and attached it with datatable's datamodel. Similary , i have got pagination working but with using an seperate <h:selectOneMenu> with logic inside backing bean. Select All checkbox as a coulmn in datatable.
    Can anybody suggest a design pattern for such component? How should all these pieces should be organised so that it will result in a single extended table component?
    Any suggestions greatly appreciated.
    Thanks in Advance.
    Sachin
    Mail ID: [email protected]

    Hi,
    Did you find a way to do it? because I also have to customize the DataTable design. Also, I don't really know where to start for this kind of customization, will you be kind to post some sample codes or tips?
    Thanks,
    Paul

  • How to click on h:datatable and open a new page

    Hi,
    I'm new to JSF. I have a basic example with JSF h:datatable which displays data. When I click on the table row new page is opened and an argument s passed via the http header:
    Datatable:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml"
          xmlns:h="http://java.sun.com/jsf/html"
          xmlns:f="http://java.sun.com/jsf/core">
        <head>
            <title>test</title>
            <script type="text/javascript">
                function addOnclickToDatatableRows() {
                    //gets all the generated rows in the html table
                    var trs = document.getElementById('myForm:dataTable').getElementsByTagName('tbody')[0]
                    .getElementsByTagName('tr');
                    //on every row, add onclick function (this is what you're looking for)
                    for (var i = 0; trs.length > i; i++) {
                        trs.onclick = new Function("rowOnclick(this)");
    function rowOnclick(tr) {
    // var childNodes = tr.childNodes;
    // for(var i = 0; childNodes.length > i; i++) {
    var elements = tr.cells[0].childNodes;
    for(var i = 0; elements.length > i; i++) {
    if ((typeof elements[i].id !== "undefined") &amp;&amp;
    (elements[i].id.indexOf("lnkHidden") > -1)) {
    //opne in a new window// window.open(elements[i].href);
    location.href=elements[i].href
    break;
    return false;
    </script>
    </head>
    <body onload="addOnclickToDatatableRows();">
    <h:form id="myForm">
    <h1>Click on table row example</h1>
    <h:dataTable id="dataTable" var="data" value="#{datatableBean.lstData}" border="1">
    <h:column>
    <f:facet name="header">
    <h:outputText value="ID" />
    </f:facet>
    <h:outputText value="#{data.id}" />
    <h:outputLink id="lnkHidden" value="AnotherPage.xhtml"
    style="display:none">
    <f:param name="id" value="#{data.id}" />
    </h:outputLink>
    </h:column>
    <h:column>
    <f:facet name="header">
    <h:outputText value="Value1" />
    </f:facet>
    <h:outputText value="#{data.value}" />
    </h:column>
    <h:column>
    <f:facet name="header">
    <h:outputText value="Value2" />
    </f:facet>
    <h:outputText value="#{data.value}" />
    </h:column>
    </h:dataTable>
    </h:form>
    </body>
    </html>
    Managed bean:package edu.home;
    import edu.home.model.Data;
    import java.util.ArrayList;
    import java.util.List;
    import javax.faces.bean.ManagedBean;
    import javax.faces.bean.ViewScoped;
    @ManagedBean
    @ViewScoped
    public class DatatableBean {
    private List<Data> lstData;
    * Creates a new instance of datatableBean
    public DatatableBean() {
    lstData = new ArrayList<Data>();
    lstData.add(new Data(1, "Hello World"));
    lstData.add(new Data(2, "Hello 123"));
    lstData.add(new Data(3, "Hello abv"));
    lstData.add(new Data(4, "Hello qaz"));
    * @return the lstData
    public List<Data> getLstData() {
    return lstData;
    * @param lstData the lstData to set
    public void setLstData(List<Data> lstData) {
    this.lstData = lstData;
    The Java object:package edu.home.model;
    public class Data {
    private int id;
    private String value;
    public Data(int id, String value) {
    this.id = id;
    this.value = value;
    * @return the id
    public int getId() {
    return id;
    * @param id the id to set
    public void setId(int id) {
    this.id = id;
    * @return the value
    public String getValue() {
    return value;
    * @param value the value to set
    public void setValue(String value) {
    this.value = value;
    The page which is opened after the row is clicked:<?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html">
    <head>
    <title>TODO supply a title</title>
    </head>
    <body>
    <h1>This is another page</h1>
    <h:panelGrid columns="2">
    <h:outputText value="Selected ID" />
    <h:outputText value="#{anotherPageBean.id}" />
    </h:panelGrid>
    </body>
    </html>
    The managed bean of the opened page:package edu.home;
    import javax.faces.bean.ManagedBean;
    import javax.faces.bean.RequestScoped;
    import javax.faces.context.FacesContext;
    @ManagedBean
    @RequestScoped
    public class AnotherPageBean {
    private int id;
    * Creates a new instance of AnotherPageBean
    public AnotherPageBean() {
    try {
    this.id = Integer.parseInt((String)FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id"));
    catch (Exception e) {
    this.id = 0;
    * @return the id
    public int getId() {
    return id;
    * @param id the id to set
    public void setId(int id) {
    this.id = id;
    My question is how I can pass the argument into the background, without using the http header? Can you help me to implement this example?
    Best Wishes
    Peter
    Edited by: 932633 on May 7, 2012 3:18 PM
    Edited by: 932633 on May 7, 2012 3:18 PM                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               

    EJP wrote:
    And why all the futzing around in Javascript? Why not just use &lt;a&gt; or <h:outputLink> in the normal way? What value are you trying to add here?
    I'm new to JSF.OP answered that already. I guess the OP really wants to turn a table row into something clickable, a link won't suffice then. Basic JSF tags don't support tagging event handlers to individual rows/columns as far as I know.
    @OP: you should really check out extension frameworks like Primefaces which have more advanced datatable implementations. Check out this for example:
    http://www.primefaces.org/showcase/ui/datatableRowSelectionInstant.jsf
    There is also Richfaces, Icefaces, Tomahawk. Probably using any of these extension frameworks you hardly ever have to write manual javascript.

  • Authentication in JSF 2.0

    I could use some advise... I've been trying to implement authentication in a JSF 2.0 web application and I've not been completely successful. I'm using NetBeans 6.8 and GlassFish v3. Here is what I would like:
    1) Use container managed security with a JDBC realm. Users who register via the web app will end up as users in the table that is used to authenticate access to the web app
    2) I want to use role-base authorization that I can specify in my web.xml file as [described in the JEE 6 tutorial.|http://java.sun.com/javaee/6/docs/tutorial/doc/bnbxj.html#bnbxu]. Thus, I'd like to secure JSF pages as well as managed bean actions.
    3) My web app uses EJB's that are secured using the [EJB annotations as described in the JEE 6 tutorial|http://java.sun.com/javaee/6/docs/tutorial/doc/bnbyl.html#gjgcq]. My understanding is that the credentials from the web app are propagated to the EJB's, so I should not need to do anything, other than catch exceptions whenever the EJB is being accessed by an unauthorized role.
    4) Ideally, I'd like to use a JSF form to request username/password from a user. I know the JSF form cannot directly post the information to the container's security mechanism (i.e. j_security_check action). While I've found some ways to do it, none are really satisfactory, so I've had to just use a plain HTML form.
    5) I could do it [authentication programmatically as explained in the JEE 6 tutorial|http://java.sun.com/javaee/6/docs/tutorial/doc/gjiie.html]. Unfortunately, the tutorial shows how to do this from a Servlet and not from JSF. In particular, I could invoke the HttpServletRequest#login method, but its result does not enter a session and thus I cannot continue to use container managed authorization past the request. If I use HttpServletRequest#authenticate, then this will force the container to present the login form I specify in web.xml and the credentials will be in the session.
    6) FYI, I've tried to implement an authentication a Filter but the URL requests that come from a JSF 2.0 app just do not correspond to what I'm looking for in the filter. That is, if I have a directory named secured where I keep JSF pages to be accessed only by authenticated users, I set up a Filter to look for these requests and it does not behave as expected (or at least the way it behaves when I use it with JSP)
    I hope someone here can help me find the resources so I can implement this. I've Googled many times and most of what I'm finding is incomplete. I'd greatly appreciate anyone's help and guidance in this. FYI... some students are counting on me to deliver a solution to this! I did not think it would be difficult, but it has turned out to be that way.
    Thanks for reading this far!
    Alvaro

    Hello Ed. I have your JSF 2.0 book now. I download and tried the authentication example that you have on chapter 14. Unfortunately, authorization is not working as I would expect it. Here are the specifics:
    1) I'm running it on GlassFish v3
    2) According to the web.xml, you create two security constraints. One on /trainer/*** requests to be accessed only by users with role of trainer. Another on the /user/*** requests to be accessed only by users with role of user
    3) Whenever I try this app, I can access that pages without ever being authenticated (i.e. without logging in). I can access them by entering the URL's, say: http://localhost:8080/formBasedLogin/faces/user/userPage.xhtml
    This is the problem I've been having whenever I try to do authorization. For some reason, either the URL is not matching the pattern specified or it gets rewritten by JSF 2.0 in some way?
    Update: I'll leave the above comments, but I was able to get your example working by changing the URL patterns to: /faces/user/*** and /faces/trainer/*** Is this an error in the sample code or should the pattern you provide still work?
    Update 2: It seems that I've now figured out that there is a difference on whether I use an outputLink or a commandLink. I need to read more about this. In any case, the URL patterns do match requests that are specified as an outputLink, but not when they are specified by a commandLink -- in this case, JSF uses JavaScript to make the request to some resource which does not match the pattern. It looks like I was just using commandLink before whereas I should have been using outputLink.

  • Problem with binding of a selectManyCheckbox inside a dataTable

    Hi,
    first i want to point out that my english is not the best. :)
    A german version is followed at the end of the english text.
    I have a class "MyClass" with few attributes like:
    private long id;
    private String text;
    private Set<MyClass2> childs;
    An a second class "MyClass2" wich also have some attributes:
    private long id;
    private String text;
    Now i have a List with lots of objects from typ "MyClass":
    List myList = new ArrayList();
    // Sample Data!!
    for (int i=0; i<100; i++)
    MyClass1 m1 = new MyClass1();
    m1.setId(i);
    m1.setText("MyClass1 Line " + i);
    // Now add some "childs":
    for (int j=0; j<i*2; j++)
    MyClass2 m2 = new MyClass2();
    m2.setId( i );
    m2.setText("Sample "+ i);
    m1.getChilds().add(m2);
    myList.add ( m1 );
    So now i want to show the ID and text every Object of MyClass1 on my "test.jsp" (width JSF Tags).
    The Collections inside this class should display as checkboxes (value = id, label = text).
    Sample:
    ID: +1+ TEXT: MyClass1 Line 1
    CHECKBOXES:
    [x] Sample 0
    [x] Sample 1
    ID: +2+ TEXT: MyClass1 Line 2
    CHECKBOXES:
    [x] Sample 0
    [x] Sample 1
    [x] Sample 2
    [x] Sample 3
    Okay i think you know what i mean. ;-)
    I tryed it also with a dataTable to iterate in "myList" and use a selectOneMenu with selectItems to generate the checkboxes.
    Here is the code:
    <h:dataTable value="#{myBean.myList}" var="rowInstance" binding="#{myBean.dataTable}" id="dataTable">
    <h:column>
    <h:outputText value="ID: #{rowInstance.id}" />
    <h:outputText value="TEXT: #{rowInstance.text}" />
    </h:column>
    <h:column>
    <h:selectManyCheckbox id="cbox" styleClass="checkbox">
    <f:selectItems value="#{myBean.childs}"/>
    </h:selectManyCheckbox>
    </h:column>
    </h:dataTable>
    Maybe you see the that i've used childs in the selectItems.
    This is a methode like that:
    public SelectItem[] getChilds()
    MyClass1 mc1 = (MyClass1) dataTable.getRowData();
    // now i iterate the childs and make for each a SelectItem()
    Also you maybe see that i have no binding on selectManyCheckbox, because i have no idea how it works. :-)
    I've tried to bind it to a String[] but and the end this String[] always contain the last low.
    My Question is now:
    When the user pressed the submit Button how can i figure out which Checkboxen the user clicked ?
    Thank you a lot.
    Now the german version (surley better explained):
    Hallo nochmal,
    ich habe versucht auf englisch mein Problem zu schildern.
    Was mit sicherheit nicht zu 100% gelungen ist, deshalb hier noch mal eine deutschsprachige Version (maybe some germans out there).
    Wie oben abgeblidet habe ich im Prinzip zwei Klassen.
    Die erste Klasse "MyClass1" hat eine Collection die Objekte von der Klasse "MyClass2" enth�lt.
    Nun m�chte ich auf meiner JSP Seite die JSF Tags benutzt eine Liste von Objekten (die vom Typ "MyClass1" sind) abbilden.
    Die Collection innerhalb dieser Klasse soll als Checkboxen dargestellt werden.
    Ich habe es ohne gro�e Probleme hinbekommen, dass er das so anzeigt wie ich das m�chte.
    Nur habe ich z.Z. noch Probleme damit wie ich sp�ter herausfinde, welche der Checkboxen denn nun angew�hlt sind.
    Normalerweise w�rde man ja ein binding machen, so k�nnte man alle ausgew�hlten Checkboxen (getSelectedValues()) ja bekommen.
    Da aber die Anzahl der Objekte immer unterschiedlich ist kann ich nicht die entsprechenden Variablen anlegen.
    Deshalb die Frage: Wie bekomme ich mit welche der Checkboxen ausgew�hlt wurden? Wie muss das binding aussehen?
    Vielen Dank.
    Greetings from Germany. :)

    Just bind it to the row object.
    JSF<h:dataTable value="#{myBean.myDataList}" var="myData">
        <h:column>
            <h:selectManyCheckbox value="#{myData.selectedItems}">
                <f:selectItems value="#{myData.selectItems}" />
            </h:selectManyCheckbox>
        </h:column>
    </h:dataTable>MyDataprivate List<String> selectedItems; // + getter + setter
    private List<SelectItem> selectItems; // + getter

  • How to cast an object in JSF?

    I am working on a travel application. A user can have several bookings and a booking can have several components. A component can be either air or hotel. I want to list the user's bookings on the client using JSF datatable.
    <h:dataTable var="component" value="#{booking.components}">
    Now depending upon the class of component I need to present different information.
    My question is how to cast the variable in JSF ?
    Thanks

    You can use the String value of Object#getClass()#getName() to lookup the classname and evaluate it in the 'rendered' attribute.
    Basic example:
    package mypackage;
    public class Animal {}
    package mypackage;
    public class Cat extends Animal {}
    package mypackage;
    public class Dog extends Animal {}
    package mypackage;
    public class Fish extends Animal {}MyBeanpublic List<Animal> getList() {
        List<Animal> animals = new ArrayList<Animal>();
        animals.add(new Dog());
        animals.add(new Cat());
        animals.add(new Fish());
        return animals;
    }JSF<h:dataTable value="#{myBean.list}" var="item">
        <h:column>
            <h:outputText value="It's a Cat" rendered="#{item.class.name == 'mypackage.Cat'}" />
            <h:outputText value="It's a Dog" rendered="#{item.class.name == 'mypackage.Dog'}" />
            <h:outputText value="It's a Fish" rendered="#{item.class.name == 'mypackage.Fish'}" />
        </h:column>
    </h:dataTable>As far there is no way to cast objects in JSF.
    Edit
    If you find it useful, move the classname request to the superclass:
    public class Animal {
        public String getType() {
            String className = getClass().getName();
            return className.substring(className.lastIndexOf('.') + 1);
    }Which makes life easier without struggling with package names:<h:outputText value="It's a Cat" rendered="#{item.type == 'Cat'}" />
    <h:outputText value="It's a Dog" rendered="#{item.type == 'Dog'}" />
    <h:outputText value="It's a Fish" rendered="#{item.type == 'Fish'}" />Message was edited by:
    BalusC

  • DataTable var in request scope?

    Hi all,
    The description for the 'var' attribute of a h:dataTable tag reads:
    "Name of a request-scope attribute under which the model data for the row ... will be exposed."
    So I thought I would be able to access the object set as 'var' in normal JSP expressions and actions:
    <h:dataTable value="#{currentItem.children}" var="item">
      <h:column>
        <h:outputText value="#{item.uri}"/>
        <f:verbatim>${item.uri}</f:verbatim>
      </h:column>
    </h:dataTable>But the ${item.uri} does not evaluate to the same as #{item.uri}. Instead, it is empty, or if 'item' pre-exists in the request scope, it shows that item (and not the one assigned by the dataTable).
    What have I misunderstood?
    Cheers,
    Roger

    Basically:
    JSF<h:dataTable binding="#{myBean.table}" value="#{myBean.list}" var="item">
        <h:column><h:outputText value="#{myBean.value}" /></h:column>
    </h:dataTable>MyBeanprivate HtmlDataTable table;
    private List<Dto> list;
    // + getters + setters
    public String getValue() {
        Dto dto = (Dto) table.getRowData();
        // Do your thing with the current row object.
    }Although I recommend to just add a new property or getter to the DTO. It saves one mapping layer.

Maybe you are looking for

  • I just downloaded ios7 now i can only use the phone with the speaker, how can i fix this?

    I just downloaded ios7 now i can only use the phone with speaker, how can i fix this?

  • Mac G5i no longer recognising digital camera

    This was working fine one day and then not the other, Previously whenever I plugged in my Pentax Optio S5i via USB port it was picked up immediately and I could copy over photos. Now nothing happens I go to System Profiler and under USB it's there, s

  • Optical drive troubleshoot

    Hello, I have a 15 inch late 2011 mac book pro with mac os x 10.7.3. It seems my optical drive is no longer coopreating, any suggestions how I can restore it? Many thanks, Caroline Eriksson

  • Iphone 4 problem

    hello i upgraded my iphone 4 to ios7 when the upgrade is done it began giving me the signal of the startup of the iphone and it doesn't proceed this stage. the phone is not turning on and it's been like 12 hour doing that. i tried the press/hold the

  • [b]Possibility to run 9iAS for OCS in clustered mode[/b]

    Possibility to run 9iAS for OCS in clustered mode Hi, we're using two nodes of 9iAS in two data centers. We've been told that it isn't possible to add the 9iAS to a 9iAS cluster. Does anybody has experience to use two nodes of 9iAS of OCS2 as cluster