2013-06-25 27 views
0

我想在jsf中格式化xmlgregoriancalendar類型的日期。我遇到過說我需要自定義轉換器的帖子。有沒有人找到不需要自定義日期轉換器的解決方案。我正在嘗試關注,但我給了我錯誤說...jsf輸出帶有fn子字符串的文本

元素類型「h:outputText」後面必須跟有屬性規範,「>」或「/>」。

這是我嘗試了JSF

<h:outputText value="#{fn:substringBefore(aClip.lastTransmittedDate,"T")}"> 
    <f:convertDateTime pattern="dd.MM.yyyy" /> 
</h:outputText> 

任何人都可以指出的解釋,我發現了錯誤?

回答

4

除了你的EL語法錯誤(基本上,用這個嵌套的雙引號你會很快結束屬性值,它變成value="#{fn:substringBefore(aClip.lastTransmittedDate,"這完全是錯誤的EL語法),畢竟這絕對不是正確的方法。

<f:convertDateTime>Date轉換爲String,反之亦然。它不會將日期模式X中的String轉換爲日期模式Y中的String,因爲您錯誤地認爲這是預期的。

給出一個XMLGregorianCalendar,你需要XMLGregorianCalendar#toGregorianCalendar()得到一個具體的實例java.util.Calendar出來的這反過來又提供了一個getTime()方法得到一個具體的實例java.util.Date出來,準備直接使用在<f:convertDateTime>

只要您的環境支持EL 2.2,這應該這樣做:

<h:outputText value="#{aClip.lastTransmittedDate.toGregorianCalendar().time}"> 
    <f:convertDateTime pattern="dd.MM.yyyy" /> 
</h:outputText> 

或者,如果您的環境不支持EL 2.2,然後改變這種方式,你有,例如一個getter返回模型java.util.Calendar

public Calendar getLastTransmittedDateAsCalendar() { 
    return lastTransmittedDate.toGregorianCalendar(); 
} 

,這樣就可以使用

<h:outputText value="#{aClip.lastTransmittedDateAsCalendar.time}"> 
    <f:convertDateTime pattern="dd.MM.yyyy" /> 
</h:outputText> 

你甚至可以添加一個返回具體java.util.Date的吸氣劑。

1

其實這個錯誤表明你沒有格式良好的XML。在EL中,您應該使用單引號來表示String。在你的情況value="#{fn:substringBefore(aClip.lastTransmittedDate,'T')}"

怎麼樣日期轉換器,你應該看到#{aClip.lastTransmittedDate}屬性的類型。 如果是日期,只需使用

<h:outputText value="#{aClip.lastTransmittedDate}"> 
    <f:convertDateTime pattern="dd.MM.yyyy" /> 
</h:outputText> 

如果不是日期(即字符串),<f:convertDateTime/>將無法​​正常工作,你應該重新格式化的Java代碼。例如,創建另一個將返回表示屬性值的修飾字符串的getter。