I'm trying to create a basic table with JSF 2.0 to send "timesheet" entries to a database. I have written my bean with setters and getters for all fields, and have managed the bean through faces-config, but I keep running into the error: "com.sun.faces.mgbean.ManagedBeanCreationException: Unable to set property monday1 for managed bean timesheet"
The property name is irrelevant, it's just the first property listed on faces-config. None of my int properties seem to work.
Here is the HTML / JSF table:
<h:form>
<table>
<thead>
<tr>
<th>Employee Details</th>
<th id="reqBox" colspan="2">
<span class="reqStar">*</span>
<span class="reqText">Required Field</span>
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
Employee ID <br />
<input name="empID" type="text" value="#{userBean.id}" readonly="readonly"/>
</td>
<td>
Employee Name <br />
<input name="empName" type="text" value="#{userBean.firstName} #{userBean.lastName}" readonly="readonly" />
</td>
<td>
Week Starting <span class="reqStar">*</span> <br />
<input name="weekOf" type="text" value="" />
<a href="javascript:NewCal('demo1','mmddyyyy')">
<img src="images/cal.gif" border="0" alt="Pick a date" width="16" height="16" />
</a>
</td>
</tr>
<tr class="whiteSpacerRow"></tr>
</tbody>
</table>
<table class="content" border="1" rules="none" frame="box" cellpadding="0" cellspacing="0">
<thead>
<tr>
<th colspan="10">Record Timesheet</th>
</tr>
<tr class="header">
<td>Task</td>
<td>Monday</td>
<td>Tuesday</td>
<td>Wednesday</td>
<td>Thursday</td>
<td>Friday</td>
<td>Saturday</td>
<td>Sunday</td>
<td>Total Hours</td>
</tr>
</thead>
<tbody>
<tr class="dateRow">
<td class="blank"></td>
<td id="monday"></td>
<td id="tuesday"></td>
<td id="wednesday"></td>
<td id="thursday"></td>
<td id="friday"></td>
<td id="saturday"></td>
<td id="sunday"></td>
</tr>
<tr id="input_row_1">
<td>
<select name="select_1">
<option>-Select One-</option>
<option value="Development">Regular Hours</option>
<option value="Vacation">Paid Vacation</option>
<option value="LOSSOFPAY">Unpaid Vacation</option>
<option value="REMOTE">Remote Work</option>
</select>
</td>
<td id="mondayInput1">
<h:inputText id="monday1" size="4" value="#{timesheet.monday1}" required="false" />
<!-- <input name="monday1" class="smallInput" type="number" size="2" maxlength="4" min="0"/> -->
</td>
<td id="tuesdayInput1">
<h:inputText id="tuesday1" size="4" value="#{timesheet.tuesday1}" required="false" />
<!--<input name="tuesday1" class="smallInput" type="number" size="2" maxlength="4" min="0"/> -->
</td>
<td id="wednesdayInput1">
<h:inputText id="wednesday1" size="4" value="#{timesheet.wednesday1}" required="false" />
<!--<input name="wednesday1" class="smallInput" type="number" size="2" maxlength="4" min="0"/> -->
</td>
<td id="thursdayInput1">
<h:inputText id="thursday1" size="4" value="#{timesheet.thursday1}" required="false" />
<!--<input name="thursday1" class="smallInput" type="number" size="2" maxlength="4" min="0"/> -->
</td>
<td id="fridayInput1">
<h:inputText id="friday1" size="4" value="#{timesheet.friday1}" required="false" />
<!--<input name="friday1" class="smallInput" type="number" size="2" maxlength="4" min="0"/> -->
</td>
<td id="saturdayInput1">
<h:inputText id="saturday1" size="4" value="#{timesheet.saturday1}" required="false" />
<!--<input name="saturday1" class="smallInput" type="number" size="2" maxlength="4" min="0"/> -->
</td>
<td id="sundayInput1">
<h:inputText id="sunday1" size="4" value="#{timesheet.sunday1}" required="false" />
<!--<input name="sunday1" class="smallInput" type="number" size="2" maxlength="4" min="0"/> -->
</td>
<td>
<!-- <h:inputText id="total1" size="4" value="" required="false" /> -->
<input name="total1" id="total1" type="text" size="5" readonly="readonly" />
</td>
</tr>
<tr id="input_row_2">
<td>
<select name="select_2">
<option>-Select One-</option>
<option value="Development">Regular Hours</option>
<option value="Vacation">Paid Vacation</option>
<option value="LOSSOFPAY">Unpaid Vacation</option>
<option value="REMOTE">Remote Work</option>
</select>
</td>
<td id="mondayInput2">
<h:inputText id="monday2" size="4" value="#{timesheet.monday2}" required="false" />
<!-- <input name="monday2" class="smallInput" type="number" size="2" maxlength="4" min="0"/> -->
</td>
<td id="tuesdayInput2">
<h:inputText id="tuesday2" size="4" value="#{timesheet.tuesday2}" required="false" />
<!--<input name="tuesday2" class="smallInput" type="number" size="2" maxlength="4" min="0"/> -->
</td>
<td id="wednesdayInput2">
<h:inputText id="wednesday2" size="4" value="#{timesheet.wednesday2}" required="false" />
<!--<input name="wednesday2" class="smallInput" type="number" size="2" maxlength="4" min="0"/> -->
</td>
<td id="thursdayInput2">
<h:inputText id="thursday2" size="4" value="#{timesheet.thursday2}" required="false" />
<!--<input name="thursday2" class="smallInput" type="number" size="2" maxlength="4" min="0"/> -->
</td>
<td id="fridayInput2">
<h:inputText id="friday2" size="4" value="#{timesheet.friday2}" required="false" />
<!--<input name="friday2" class="smallInput" type="number" size="2" maxlength="4" min="0"/> -->
</td>
<td id="saturdayInput2">
<h:inputText id="saturday2" size="4" value="#{timesheet.saturday2}" required="false" />
<!--<input name="saturday2" class="smallInput" type="number" size="2" maxlength="4" min="0"/> -->
</td>
<td id="sundayInput2">
<h:inputText id="sunday2" size="4" value="#{timesheet.sunday2}" required="false" />
<!--<input name="sunday2" class="smallInput" type="number" size="2" maxlength="4" min="0"/> -->
</td>
<td>
<!-- <h:inputText id="total2" size="4" value="#{timesheet.total2}" required="false" /> -->
<input name="total2" id="total2" type="text" size="5" readonly="readonly" />
</td>
</tr>
<tr class="green"><th colspan="10">Expenses</th></tr>
<tr class="header">
<td class="blank"></td>
<td>Air Fare</td>
<td>Lodging</td>
<td>Car Rental</td>
<td>Per-Diem</td>
<td class="blank"></td>
<td class="blank"></td>
<td class="blank"></td>
<td>Total Expenses</td>
</tr>
<tr class="greenSpacerRow"></tr>
<tr>
<td class="blank"></td>
<td>
<h:inputText id="airFare" size="6" value="#{timesheet.airFare}" required="no" />
<!-- <input name="airFare" class="smallInput" type="number" size="4" maxlength="4" min="0"/> -->
</td>
<td>
<h:inputText id="lodging" size="6" value="#{timesheet.lodging}" required="false" />
<!-- <input name="lodging" class="smallInput" type="number" size="4" maxlength="4" min="0"/> -->
</td>
<td>
<h:inputText id="carRental" size="6" value="#{timesheet.carRental}" required="false" />
<!-- <input name="carRental" class="smallInput" type="number" size="4" maxlength="4" min="0"/> -->
</td>
<td>
<h:inputText id="perDiem" size="6" value="#{timesheet.perDiem}" required="false" />
<!-- <input name="perDiem" class="smallInput" type="number" size="4" maxlength="4" min="0"/> -->
</td>
<td class="blank"></td>
<td class="blank"></td>
<td class="blank"></td>
<td>
<input name="expenseTotal" id="expenseTot" class="smallInput" type="text" size="4" maxlength="4" min="0" readonly="readonly"/>
</td>
</tr>
</tbody>
</table>
<table class="content" border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<input type="button" onClick="submitTimesheet()" value="Submit" />
<input type="button" onClick="cancel()" value="Cancel" />
<input type="button" onClick="displayTimesheets()" value="Display Entered Timesheets" />
</td>
</tr>
</tbody>
</table>
</h:form>
and my faces-config:
<?xml version="1.0" encoding="UTF-8"?>
<faces-config version="2.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd">
<managed-bean>
<managed-bean-name>timesheet</managed-bean-name>
<managed-bean-class>com.timesheet.Timesheet</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>date</property-name>
<property-class>java.util.Date</property-class>
<value/>
</managed-property>
<managed-property>
<property-name>monday1</property-name>
<property-class>int</property-class>
<value/>
</managed-property>
<managed-property>
<property-name>monday2</property-name>
<property-class>int</property-class>
<value/>
</managed-property>
<managed-property>
<property-name>tuesday1</property-name>
<property-class>int</property-class>
<value/>
</managed-property>
<managed-property>
<property-name>tuesday2</property-name>
<property-class>int</property-class>
<value/>
</managed-property>
<managed-property>
<property-name>friday1</property-name>
<property-class>int</property-class>
<value/>
</managed-property>
<managed-property>
<property-name>friday2</property-name>
<property-class>int</property-class>
<value/>
</managed-property>
<managed-property>
<property-name>saturday1</property-name>
<property-class>int</property-class>
<value/>
</managed-property>
<managed-property>
<property-name>saturday2</property-name>
<property-class>int</property-class>
<value/>
</managed-property>
<managed-property>
<property-name>sunday1</property-name>
<property-class>int</property-class>
<value/>
</managed-property>
<managed-property>
<property-name>sunday2</property-name>
<property-class>int</property-class>
<value/>
</managed-property>
<managed-property>
<property-name>thursday1</property-name>
<property-class>int</property-class>
<value/>
</managed-property>
<managed-property>
<property-name>thursday2</property-name>
<property-class>int</property-class>
<value/>
</managed-property>
<managed-property>
<property-name>wednesday1</property-name>
<property-class>int</property-class>
<value/>
</managed-property>
<managed-property>
<property-name>wednesday2</property-name>
<property-class>int</property-class>
<value/>
</managed-property>
<managed-property>
<property-name>workType1</property-name>
<property-class>java.lang.String</property-class>
<value/>
</managed-property>
<managed-property>
<property-name>workType2</property-name>
<property-class>java.lang.String</property-class>
<value/>
</managed-property>
</managed-bean>
<managed-bean>
<managed-bean-name>jobPostings</managed-bean-name>
<managed-bean-class>com.logic.JobPostings</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>postings</property-name>
<property-class>org.apache.myfaces.custom.fileupload.UploadedFile</property-class>
<value/>
</managed-property>
</managed-bean>
</faces-config>
if you want to see my stack trace or bean for setters / getters I can put it up as well