簡體   English   中英

如何解決帶有日期值的h:inputText中的“空轉換器”的“轉換錯誤設置值'2013-10-26'”?

[英]How to solve “Conversion Error setting value '2013-10-26' for 'null Converter'” in h:inputText with Date value?

當我按下插入按鈕時,出現標題上指示的錯誤

空轉換器的轉換錯誤設置值“ 2013-10-26”

<h:form id="formulario">
   <h:outputLabel for="date">Plazo</h:outputLabel>
   <h:inputText id="date" required="true" requiredMessage="Campo Obligatorio" value="#{aaaNewDetalles.criterioAaa.plazo}"/>
   <h:message for="date" style="color: red;"/>
   <h:commandButton actionListener="#{aaaNewDetalles.add()}" value="Ingresar"/>
</h:form>

表單由此類管理:

@ManagedBean(name = "aaaNewDetalles")
@ViewScoped
public class aaaNewDetallesBean {
     private CriterioAaaController controller;
     private CriterioAaa criterioAaa;

    @PostConstruct
    public void init(){
          controller= new CriterioAaaController();
          criterioAaa= new CriterioAaa();
    }

    public void add(){
        controller.save(criterioAaa);
    }

    public CriterioAaa getCriterioAaa() {
        return criterioAaa;
    }

    public void setCriterioAaa(CriterioAaa criterioAaa) {
        this.criterioAaa = criterioAaa;
    }
}

對象CriterioAaa:

import java.sql.Date;

@Table(name = "criterio_aaa", schema = "", catalog = "ciclos_calidad")
@Entity
public class CriterioAaa extends Entidad implements Serializable {

    private Date plazo;

    public Date getPlazo() {
        return plazo;
    }

    public void setPlazo(Date plazo) {
        this.plazo = plazo;
    }

}

您當前的方法存在兩個問題:

  1. 您應該使用java.util.Date而不是java.sql.Date JSF和其他框架使用這種類型。 另外, java.sql.Date擴展了java.util.Date但其目的基本上是為了JDBC使用。 有關此的更多信息: 日期vs時間戳vs日歷?

  2. <h:inputText>期望將String作為值,並且在將數據發送到托管bean時,還期望class字段也來自String類型。 在這種情況下,您需要使用一個轉換器來告訴JSF該String實際上表示一個Date 為此,您可以使用<f:convertDateTime>標記組件。

     <h:inputText id="date" required="true" requiredMessage="Campo Obligatorio" value="#{aaaNewDetalles.criterioAaa.plazo}"> <f:convertDateTime pattern="yyyy-MM-dd" /> </h:inputText> 

作為建議,您可以使用第三方庫(如PrimeFaces或RichFaces)中的<rich:calendar>組件,它們分別提供<p:calendar><rich:calendar>組件。

您應該導入適當的Date包:

import java.util.Date;

在Managed Bean中,您應該使用java.util.Date。 並指定轉換器。 例如

<h:inputText id="date" required="true" requiredMessage="Hire Date"
value="#{empBean.empDetail.hireDate}">
<f:convertDateTime pattern="yyyy-MM-dd" />
</h:inputText>

您可以為DateTimeConverter指定模式,也可以使用dateStyle,timeStyle,type。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM