2011-11-16 18 views
2

我寫了一個簡單的表單和託管bean來存儲提交給SQL服務器的數據。下載sqljdbc並得到它安裝。出現以下情況:JSF無法格式化給定的對象作爲日期

javax.servlet.ServletException: Cannot format given Object as a Date 

不清楚究竟發生什麼事......

<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:p="http://primefaces.prime.com.tr/ui" 
    xmlns:f="http://java.sun.com/jsf/core"> 
<h:head> 
    <title>Reservation Request</title> 
</h:head> 
<body> 
<h:form> 
    <h2>Event Details:</h2> 
    <table cellspacing="10"> 
     <tr> 
      <td> 
       Event Title: 
      </td> 
      <td> 
     <p:inputText id="eventTitle" value="#{formData.eventTitle}"/> 
      </td> 
     </tr> 
    </table> 
    <table> 
     <tr> 
      <td> 
       <p:tab title="startDate"> 
        <h:panelGrid columns="2" cellpadding="10"> 
         <label>Start Date</label> 
         <p:calendar value="#{formData.startDate}}" required="true" /> 
         <h:message for="startDate" /> 
        </h:panelGrid> 
        </p:tab> 
      </td> 
      <td> 
       <p:tab title="endDate"> 
        <h:panelGrid columns="2" cellpadding="10"> 
         <label>End Date</label> 
         <p:calendar value="#{formData.endDate}" required="true" /> 
         <h:message for="endDate" /> 
        </h:panelGrid> 
        </p:tab> 
      </td> 
     </tr> 
     <tr> 
      <td> 
       Request Type/Purpose: 
      </td> 
     </tr> 
     <tr> 
      <td> 

       <h:selectOneMenu id="purposeOption" 
       required="true" 
       value="#{formData.requestType}"> 
       <f:selectItem 
        itemValue="#{formData.projectOption}" 
        itemLabel="Project"/> 
       <f:selectItem 
        itemValue="#{formData.trainingOption}" 
        itemLabel="Training"/> 
       </h:selectOneMenu> 
      </td> 
     </tr> 
    </table> 
    <table cellspacing="10"> 
     <tr> 
      <td> 
       Workstations Required: 
      </td> 
      <td> 
     <p:inputText value="#{formData.terminalsRequired}" id="terminals"/> 
      </td> 
     </tr> 
    </table> 
    <br></br> 
    <h2>Requester Information:</h2> 
    <table cellspacing="10"> 
     <tr> 
      <td> 
       Last Name: 
      </td> 
      <td> 
       <p:inputText value="#{formData.lastName}" id="lastName"/> 
      </td> 
      <td> 
       First Name: 
      </td> 
      <td> 
       <p:inputText value="#{formData.firstName}" id="firstName"/> 
      </td> 
      <td> 
       M.I: 
      </td> 
      <td> 
      <p:inputText value="#{formData.middleInitials}" id="middleInitials"/> 
      </td> 
     </tr> 
     <tr> 
      <td> 
       Badge: 
      </td> 
      <td> 
     <p:inputText value="#{formData.badgeNo}" id="badgeNo"/> 
      </td> 
      <td> 
       Network ID: 
      </td> 
      <td> 
      <p:inputText value="#{formData.networkID}" id="networkID"/> 
      </td> 
      <td> 
       Telephone: 
      </td> 
      <td> 
      <p:inputText value="#{formData.telephoneNo}" id="telephoneNo"/> 
      </td> 
     </tr> 
     <tr> 
      <td> 
       Org Code: 
      </td> 
      <td> 
     <p:inputText value="#{formData.orgCode}" id="orgCode"/> 
      </td> 
      <td> 
       Org Name: 
      </td> 
      <td> 
       <p:inputText value="#{formData.orgName}" id="orgname"/> 
      </td> 
     </tr> 
    </table> 
    <br></br> 
    <table> 
     <tr> 
      <td> 
       <b>Justification:</b> 
      </td> 
     </tr> 
     <tr> 
      <td> 
     <p:inputTextarea value="#{formData.justification}" id="justification" cols="80" rows="10" /> 
      </td> 
     </tr> 
     <tr> 
      <td> 
     <h:commandButton value="Submit Data!" action="#{formData.storeTheData()}"/> 
      </td> 
     </tr> 
    </table> 
</h:form> 
</body> 
</html> 

和支持bean是:

package core.smd.classes; 

import javax.faces.bean.ManagedBean; 
import javax.faces.bean.SessionScoped; 
import java.util.Date; 
import java.sql.*; 
/** 
* 
* @author 
*/ 
@ManagedBean 
@SessionScoped 
public class FormData { 
//global variables 
String eventTitle; 
Date startDate; 
Date endDate; 
String requestType; 
int terminalsRequired; 
String lastName; 
String firstName; 
String middleInitials; 
int badgeNo; 
String networkID; 
String telephoneNo; 
String orgCode; 
String orgName; 
String trainingOption; 
String projectOption; 
String justification; 
/*End of variables declaration*/ 

/** Creates a new instance of FormData */ 
public FormData() { 
} 

public int getBadgeNo() { 
    return badgeNo; 
} 

public String getJustification() { 
    return justification; 
} 

public void setJustification(String justification) { 
    this.justification = justification; 
} 


public void setBadgeNo(int badgeNo) { 
    this.badgeNo = badgeNo; 
} 

public String getProjectOption() { 
    return projectOption; 
} 

public void setProjectOption(String projectOption) { 
    this.projectOption = projectOption; 
} 

public String getTrainingOption() { 
    return trainingOption; 
} 

public void setTrainingOption(String trainingOption) { 
    this.trainingOption = trainingOption; 
} 



public Date getEndDate() { 
    return endDate; 
} 

public void setEndDate(Date endDate) { 
    this.endDate = endDate; 
} 

public String getEventTitle() { 
    return eventTitle; 
} 

public void setEventTitle(String eventTitle) { 
    this.eventTitle = eventTitle; 
} 

public String getFirstName() { 
    return firstName; 
} 

public void setFirstName(String firstName) { 
    this.firstName = firstName; 
} 

public String getLastName() { 
    return lastName; 
} 

public void setLastName(String lastName) { 
    this.lastName = lastName; 
} 

public String getMiddleInitials() { 
    return middleInitials; 
} 

public void setMiddleInitials(String middleInitials) { 
    this.middleInitials = middleInitials; 
} 

public String getNetworkID() { 
    return networkID; 
} 

public void setNetworkID(String networkID) { 
    this.networkID = networkID; 
} 

public String getOrgCode() { 
    return orgCode; 
} 

public void setOrgCode(String orgCode) { 
    this.orgCode = orgCode; 
} 

public String getOrgName() { 
    return orgName; 
} 

public void setOrgName(String orgName) { 
    this.orgName = orgName; 
} 

public String getRequestType() { 
    return requestType; 
} 

public void setRequestType(String requestType) { 
    this.requestType = requestType; 
} 

public Date getStartDate() { 
    return startDate; 
} 

public void setStartDate(Date startDate) { 
    this.startDate = startDate; 
} 

public String getTelephoneNo() { 
    return telephoneNo; 
} 

public void setTelephoneNo(String telephoneNo) { 
    this.telephoneNo = telephoneNo; 
} 

public int getTerminalsRequired() { 
    return terminalsRequired; 
} 

public void setTerminalsRequired(int terminalsRequired) { 
    this.terminalsRequired = terminalsRequired; 
} 

public void storeTheData(){ 
    //prepared statenebts 
    PreparedStatement preStmt = null; 


    try { 
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
    String connectionUrl = "jdbc:sqlserver://localhost:1433;" + 
     "xxxx;user=sa;password=xxxxx;"; 
    Connection con = DriverManager.getConnection(connectionUrl); 
    String sqlQuery = "INSERT INTO Pending_Requests(Request_No, Request_Details, Network_ID, Request_Status) VALUES(?, ?, ?, ?)"; 
    preStmt = con.prepareStatement(sqlQuery); 
    preStmt.setString(1, telephoneNo); 
    preStmt.setString(2, eventTitle); 
    preStmt.setString(3, networkID); 
    preStmt.setString(4, eventTitle); 
    preStmt.executeUpdate(); 
    con.commit(); 

    } catch (SQLException e) { 
     System.out.println("SQL Exception: "+ e.toString()); 
    } catch (ClassNotFoundException cE) { 
     System.out.println("Class Not Found Exception: "+ cE.toString()); 
    } 
} 
} 

我知道提交的數據實際上並沒有被存儲完全,但我只是測試,如果SQL qorks和preparedStatement ...因此只存儲提交的數據的一部分。 謝謝,

+4

注:'#{formData.startDate}}'有一個雙'}}' – Bozho

+0

難道說' startDate'或'endDate'是'null'?我可以想象,框架將無法將空值轉換爲日曆輸入的值... –

+0

好的,startDate周圍的雙括號引起了這個問題......一個錯誤的課程。但現在當我輸入數據並提交時,沒有任何事情發生或存儲到數據庫中。有任何想法嗎? –

回答

1

嘗試使用日期時間轉換器。

<f:convertDateTime pattern="dd/MM/yyyy HH:mm" timeZone="GMT+5" />

添加自己的時區ofcourse這裏是一個工作片斷

<p:calendar id="end" value="#{message.endDate}" mode="popup" pattern="dd/MM/yyyy HH:mm" size="17"> 
            <f:convertDateTime pattern="dd/MM/yyyy HH:mm" timeZone="GMT+5" /> 
           </p:calendar> 
+0

是的,夥伴會考慮我實際處理的日期,但不是。我只是存儲3個字段,你可以從代碼中看到:) –

+0

這是偉大的伴侶將在以後處理日期時保留它。 :D –

+0

ahhh你的意思是日期不是你現在的問題,提交不工作?或者你沒有問題了,日期以前沒有存儲在數據庫中,現在你已經發現它是因爲你沒有處理它?哪一個 ?? – khizar