2

Today I noticed ocpsoft has a nice time library adapted to use in JSF 2 as a converter. The strong point of that is you can use the converter directly in the date displayed in the view and it converts it into a string telling the user something like 6 hours ago or 17 hours from now. I think my best is to combine both, the JSF converted date and this one to display something like 26-03-2013 17:00 (4 hours from now). I can achieve something similar with the following code:

<h:outputText value="#{task._StartDate}" style="padding:2px;">
    <f:convertDateTime pattern="dd-MM-yyyy HH:mm" timeZone="GMT+1" />
</h:outputText>
<h:outputText value="#{task._StartDate}">
    <f:converter converterId="org.ocpsoft.PrettyTimeConverter" />
</h:outputText>

My problem comes when I want to put the second value into parenthesis. The PrettyTimeConverter accepts only a date as a value and I can't write the parenthesis there directly. Also JSF is not accepting the following:

<h:outputFormat value="({0})">
    <f:param value="#{task._StartDate}">
        <f:converter converterId="org.ocpsoft.PrettyTimeConverter" />
    </f:param>
</h:outputFormat>

With that I have the following error:

<f:converter> Parent not an instance of ValueHolder: 
javax.faces.component.UIParameter@1492636

Any idea about how to achieve that avoiding writing both parentheses using specific h:outputText tags?

Aritz
  • 30,971
  • 16
  • 136
  • 217

1 Answers1

3

You can just put those parentheses directly in template text without the need for another <h:outputText>s.

<h:outputText value="#{task._StartDate}" style="padding:2px;">
    <f:convertDateTime pattern="dd-MM-yyyy HH:mm" timeZone="GMT+1" />
</h:outputText>
(<h:outputText value="#{task._StartDate}">
    <f:converter converterId="org.ocpsoft.PrettyTimeConverter" />
</h:outputText>)

See also:

Community
  • 1
  • 1
BalusC
  • 1,082,665
  • 372
  • 3,610
  • 3,555