I have done a piece of code for opening a dropdown upon selecting a value from another dropdown in jsf.While executing ,i get a problem like this:
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
Aug 30, 2015 6:32:59 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 3654 ms
Aug 30, 2015 6:33:00 PM com.sun.faces.application.view.FaceletViewHandlingStrategy handleRenderException
SEVERE: Error Rendering View[/Home.xhtml]
javax.el.ELException: /Home.xhtml @57,71 value="#{authorData.car4List}": Error reading 'car4List' on type Author
at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:114)
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)
at javax.faces.component.UISelectItems.getValue(UISelectItems.java:129)
at com.sun.faces.renderkit.SelectItemsIterator.initializeItems(SelectItemsIterator.java:202)
at com.sun.faces.renderkit.SelectItemsIterator.hasNext(SelectItemsIterator.java:135)
at com.sun.faces.renderkit.html_basic.MenuRenderer.renderOptions(MenuRenderer.java:761)
at com.sun.faces.renderkit.html_basic.MenuRenderer.renderSelect(MenuRenderer.java:843)
at com.sun.faces.renderkit.html_basic.MenuRenderer.encodeEnd(MenuRenderer.java:297)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:924)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1863)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:437)
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:124)
at com.sun.faces.lifecycle.RenderResponseP
Here is my xhtml file:
<?xml version="1.0" encoding="`enter code here`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:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<f:event listener="#{userData.handleEvent}" type="preRenderView" />
</h:head>
<h:body>
<f:view>
<h:form >
<table>
<tr>
<td> <h:messages showDetail="true" /> </td>
</tr>
<tr>
<td><h:outputText value="Enter name : "/></td>
<td><h:inputText value="#{userData.clientname}"/></td>
</tr>
<tr>
<td><h:outputText value="Enter Id : " /></td>
<td><h:inputText value="#{userData.id}" /></td>
</tr>
<tr>
<td></td>
<td><h:commandButton value="Insert" action="#{userData.add}"/></td>
</tr>
<tr>
<td></td>
<td>#{userData.data}</td>
</tr>
<tr>
<td><h:selectOneRadio value="#{authorData.favColor1}" id="div2">
<f:selectItem itemValue="Red" itemLabel="Color1 - Red" />
<f:selectItem itemValue="Green" itemLabel="Color1 - Green"/>
<f:ajax event="click" binding="valbinding" execute="@form" render=":div1" listener="#{authorData.setchangeval}"/>
</h:selectOneRadio></td>
</tr>
</table>
</h:form>
<h:panelGroup id="div1" style="display: #{authorData.valdisplay};">
<span>
You have selected #{authorData.message}
</span>
</h:panelGroup>
</f:view>
<br/>
<h:outputLabel value="Choose your Car: * " for="firstdropdwn" />
<h:selectOneMenu id="firstdropdwn" value="#{authorData.favoriteCar2}">
<f:selectItems value="#{authorData.car4List}" var="d"
itemLabel="#{d.carlabel}" itemValue="#{d.carvalue}"/>
<f:ajax event="click" binding="valbinding1" execute="@this firstdropdwn" render=":seconddrpdown" listener="#{authorData.setDropDwnVal}"/>
</h:selectOneMenu>
<br/>
<h:outputLabel value="Choose your Owner: * " for="seconddrpdown" />
<h:selectOneMenu id="seconddrpdown" value="">
<f:selectItems value="#{authorData.car3List}" var="c"
itemLabel="#{c.carlabel}" itemValue="#{c.carvalue}"/>
</h:selectOneMenu>
</h:body>
</html>
Here is my java code(Author.java):
import java.io.Serializable;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
import java.util.Map;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.bean.ViewScoped;
import javax.faces.component.UIComponent;
import javax.faces.event.AjaxBehaviorEvent;
import javax.faces.event.ComponentSystemEvent;
@ManagedBean(name = "authorData", eager = true)
@SessionScoped
public class Author implements Serializable {
private static final long serialVersionUID = 1L;
String clientname;
String id;
String favColor1;
public String favoriteCar2;
private UIComponent valbinding;
private UIComponent valbinding1;
public List<Car> car3List;
/*public Car[] getFavoriteCar3Value()
{
car3List = new Car[3];
car3List[0] = new Car("BMW Series 4 - 316", "316");
car3List[1] = new Car("BMW Series 4 - 318", "318");
car3List[2] = new Car("BMW Series 4 - 320", "320");
return car3List;
}
*/
public List<Car> getCar3List() {
return car3List;
}
public void setCar3List(List<Car> car) {
this.car3List = car;
}
public List<Car> car4List;
public List<Car> getCar4List() {
car4List.add(new Car("BMW","116"));
car4List.add(new Car("AUDI","118"));
car4List.add(new Car("MERCEDES","120"));
return car4List;
}
public UIComponent getValbinding1() {
return valbinding1;
}
public void setValbinding1(UIComponent valbinding1) {
this.valbinding1 = valbinding1;
}
private String valdisplay="none";
private String message;
public String getFavoriteCar2() {
return favoriteCar2;
}
public void setFavoriteCar2(String favoriteCar2) {
this.favoriteCar2 = favoriteCar2;
}
private static Map<String, String> favoriteCar2Value;
static
{
favoriteCar2Value = new LinkedHashMap<String, String>();
favoriteCar2Value.put("BMW Series 1 - 116", "116"); //label, value
favoriteCar2Value.put("BMW Series 1 - 118", "118");
favoriteCar2Value.put("BMW Series 1 - 120", "120");
}
public Map<String, String> getFavoriteCar2Value()
{
return favoriteCar2Value;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getValdisplay() {
return valdisplay;
}
public void setValdisplay(String valdisplay) {
this.valdisplay = valdisplay;
}
public UIComponent getValbinding() {
return valbinding;
}
public void setValbinding(UIComponent valbinding) {
this.valbinding = valbinding;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getClientname() {
return clientname;
}
public void setClientname(String clientname) {
this.clientname = clientname;
}
public String getFavColor1() {
return favColor1;
}
public void setFavColor1(String favColor1) {
this.favColor1 = favColor1;
}
public void setchangeval(AjaxBehaviorEvent e){
this.setValdisplay("none");
if(this.getFavColor1().equalsIgnoreCase("red")){
this.setValdisplay("block");
this.setMessage("RED");
}else if(this.getFavColor1().equalsIgnoreCase("Green")){
this.setValdisplay("block");
this.setMessage("GREEN");
}
}
public void setDropDwnVal(AjaxBehaviorEvent e){
if(this.getFavoriteCar2().equalsIgnoreCase("116")){
LinkedList<Car> ob = new LinkedList<Car>();
ob.add(new Car("Aife","0"));
ob.add(new Car("Anirban","1"));
this.setCar3List(ob);
}else {
LinkedList<Car> ob1 = new LinkedList<Car>();
ob1.add(new Car("Saife","0"));
ob1.add(new Car("Abid","1"));
this.setCar3List(ob1);
}
}
}
Kindly give me a solution as well as a proper code to execute that dynamically.Thanks in advance.