File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
http://aspose.com/file-tools
The moose likes JSF and the fly likes Problem with simple datatable Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Spring in Action this week in the Spring forum!
JavaRanch » Java Forums » Java » JSF
Bookmark "Problem with simple datatable" Watch "Problem with simple datatable" New topic
Author

Problem with simple datatable

Max Duval
Greenhorn

Joined: Jul 16, 2008
Posts: 7
Hi!

I'm new to JSF and to experiment with JSF, and Rich Datatables I tried to create a dumb, simple project to output a simple datable with only one column.

Its so simple that it should work but its not, I cant get my datatable to iterate over my collection.

I have 2 classes :

<blockquote>code:
<pre name="code" class="core">
package test;

import java.util.ArrayList;
import java.util.Collection;

public class TestBean {

private String nomTableau;
private Collection<Detail> listeDetails;

public TestBean(){
this.nomTableau = "Commmmoonn!!!";

this.listeDetails = new ArrayList<Detail>();

this.listeDetails.add(new Detail("detail 1"));
this.listeDetails.add(new Detail("detail 2"));
this.listeDetails.add(new Detail("detail 3"));
}

public Collection<Detail> getListeDetails() {

return listeDetails;
}

public void setListeDetails(Collection<Detail> listeDetails) {
this.listeDetails = listeDetails;
}

public String getNomTableau() {
return nomTableau;
}

public void setNomTableau(String nomTableau) {
this.nomTableau = nomTableau;
}


}
</pre>
</blockquote>

And :

<blockquote>code:
<pre name="code" class="core">
package test;

public class Detail {

private String detail;

public Detail(){
this.detail = "bidon";
}

public Detail(String detail){
this.detail = detail;
}

public String getDetail() {
return detail;
}

public void setDetail(String detail) {
this.detail = detail;
}
}
</pre>
</blockquote>

In faces-config.xml I put my TestBean class as bein managed :

<blockquote>code:
<pre name="code" class="core">
<faces-config>
<managed-bean>
<managed-bean-name>testBean</managed-bean-name>
<managed-bean-class>test.TestBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
</faces-config>
</pre>
</blockquote>


And finaly, I try to output the result in a jsp file :

<blockquote>code:
<pre name="code" class="core">
<%@ taglib uri="http://richfaces.org/a4j" prefix="a4j"%>
<%@ taglib uri="http://richfaces.org/rich" prefix="rich"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<html>
<head>
<title>Simple Data Table</title>
</head>
<body>

<rich:dataTable id="laTable" var="item" value="#{testBean.listeDetails}" >
<rich:column>
<f:facet name="header">
<hutputText value="#{testBean.nomTableau}" />
</f:facet>
<hutputText value="#{item.nomDetail}" />
</rich:column>
</rich:dataTable>

</body>
</html>
</pre>
</blockquote>


The value of "testBean.nomTableau" is displayed but thats all. When I check the logs I always get the following output when I try to print the value of "item.nomDetail" :

<blockquote>code:
<pre name="code" class="core">
(DEBUG) ValueBindingImpl : getValue(ref=item.nomDetail)
(DEBUG) ApplicationImpl : Couldn't find a factory for item
(DEBUG) VariableResolverImpl : resolveVariable: Resolved variable:null
(DEBUG) ValueBindingImpl : getValue Result:null
(DEBUG) ValueBindingImpl : -->Returning null
(DEBUG) HtmlBasicInputRenderer : component.getValue() returned null
(DEBUG) HtmlBasicRenderer : Value to be rendered null
</pre>
</blockquote>

Anybody have an idea of what I'm doing wrong?

Thank you!

Maxime
Max Duval
Greenhorn

Joined: Jul 16, 2008
Posts: 7
Ok, my problem is solved.

I added <f:view> tags and it fixed my problem. Are those tags mandatory when you want to display dynamic data in JSF?

Maxime
Andres Quinones
Ranch Hand

Joined: Oct 09, 2006
Posts: 57
Max the problem I found is that <hutputText value="#{item.nomDetail}" /> should be <hutputText value="#{item.detail}" />, because the attribute for the class Detail is detail and the getDetail() method is the one that will return the value. Otherwise you should have a method named getNomDetail() for your actual code to work.

Also don't forget the <f:view> and <h:form> tags for the page.

Hope this helps.
Max Duval
Greenhorn

Joined: Jul 16, 2008
Posts: 7
Thank you Andres for your awnser.

When I sent this post, I was in the middle of changing the name in Detail to "nomDetail" but I forgot to do it before putting the code snippet.

As for the <f:view> and <h:form>, it started working when I added the <f:view> tag. I still dont have a <h:form> one.

Are those tags always mandatory? If I'm only displaying data, is <h:form> necessary?

Thansk!

Maxime
Andres Quinones
Ranch Hand

Joined: Oct 09, 2006
Posts: 57
The <h:form> is only when you need to do requests to the server, otherwise you only need the <f:view>.

Good to hear that now is working. Any other questions don't hesitate to post.
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: Problem with simple datatable