使用<f:convertDateTime>格式化日期并在<h:outputText>中显示。

5
我希望在h:outputText中显示类似于“2010年10月20日,Mary”的内容。日期值存储在MBean的名为date1的字段中,而用户名存储在MBean的名为username的字段中。我使用以下EL表达式和UI控件:
<h:outputText value="#{MBean.date1} by #{MBean.username}">
   <f:convertDateTime pattern="YYYY-MM-DD" timeZone="#{configMB.timeZone}" />
</h:inputText>

该值可以显示,但它忽略了f:convertDateTime指定的日期格式。无论我如何更改日期格式,它总是显示类似于“2010-06-08 12:35:22.0 by Mary”的内容。我该如何解决这个问题?

更新:Zenzen的解决方案可通过以下代码更改实现。

<h:outputFormat value="{0, date, yyyy-MM-dd} by #{1}">
    <f:param value="#{MBean.date1}" />
    <f:param value="#{MBean.username}" />
</h:outputFormat>

然而,我该如何使用类似于h:outputFormat<f:param>的方法来格式化只读h:inputText的值呢?有时显示的值太长了,使用<h:outputFormat>会生成包含格式化消息的标签。我想要实现的效果类似于<input type="text">,即UI控件具有固定长度,用户可以滚动查看消息(如果消息太长)。另外,如何使用CSS或JavaScript格式化标记,使其行为看起来像<input type="text">呢?
1个回答

16
你可以像这样做:
<h:outputFormat value="{0, date, yyyy-MM-dd} by #{MBean.username}">
    <f:param value="#{MBean.date1}" />
</h:outputFormat>

我确信它将与value="{0, date, yyyy-MM-dd}"一起使用,但不确定在添加"by #{MBean.username}"后是否一切正常。


成功了!非常感谢。但是我能否使用类似于h:outputFormat<f:param>的方法来格式化只读的h:inputText的值?有时显示的值太长,使用<h:outputFormat>会生成包含格式化消息的span标签。我想要一个像<input type="text">这样的效果,即UI控件具有固定长度,如果消息太长,则用户可以滚动查看消息。或者,如何格式化span标签,使其行为看起来像<input type="text">,使用CSS或JavaScript? - Ken Chan
1
这是一个新的独立问题。向HTML/CSS/JS专家们提出一个新问题吧。这个问题已经被回答了。标记最有帮助的答案为已接受 - 好吧,只有一个 :) - BalusC
1
这个解决方案缺少的是时区的规范。有没有办法通过h:outputFormat来实现呢? - Kevin Rahe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接