私がやろうとしているのは、timeMillis
時間をミリ秒単位で保存するプロパティを取得し(使用して取得したSystem.currentTimeMillis()
もの)、現在の時刻から減算した後、同等の日数、時間、分、秒に変換することです。主な問題は、コンバーターが呼び出されるたびに関数timeConverter
のみが呼び出され、呼び出されないことです。getAsString
getAsObject
これは、コンバーターが正しく実行されない原因となっている xhtml ファイルの一部です。
<c:forEach var="p" items="#{statusBean.statusList}">
<h:form>
<div class="status">
<h:commandLink action="#{friendBean.gotoFriendProfile(p.email)}">
<img src="../images/profilePicture/#{p.picture}" style="height: 29px; width: 29px; "/>
<h:outputText value="#{p.statusBy}:"/>
</h:commandLink>
<h:outputText value="#{p.statusmsg}"/>
<h:outputText value="#{p.timeMillis}">
<f:converter converterId="timeConverter"/>
</h:outputText>
<br/>
<c:forEach var="q" items="#{statusBean.commentList(p.statusId)}">
<div class="barcomment">
<br/>
<h:commandLink action="#{friendBean.gotoFriendProfile(q.email)}">
<img src="../images/profilePicture/#{q.picture}" style="height: 29px; width: 29px; "/>
<h:outputText value="#{q.commentBy}:"/>
</h:commandLink>
<h:outputText value=" #{q.comment}"/>
</div>
</c:forEach>
<br/>
<div class="comment">
<p:inputText value="#{statusBean.comment.comment}" styleClass="box" />
<p:commandLink value="Views" action="#{statusBean.update(p.statusId)}" ajax="false" styleClass="link"/>
</div>
これが私が書いた timeConverter クラスです。
package com.converter;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
public class TimeConverter implements Converter {
@Override
public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
System.out.println("inside getAsObject");
long time=Integer.parseInt(arg2);
long currentTime=System.currentTimeMillis();
long eclapseTime=time-currentTime;
long secs=eclapseTime/1000;
long days=secs/(60*60*24);
long hours=(secs%(60*60*24))/60*60;
long mins=(secs%(60*60*24)%(60*60))/60;
long secs2=(secs%(60*60*24)%(60*60)%(60));
StringBuffer sb = new StringBuffer();
sb.append(days).append("days").append(hours).append("hours").append(mins).append("mins").append(secs2).append("secs");
String object1 = sb.toString();
return object1;
}
@Override
public String getAsString(FacesContext context, UIComponent component,
Object value) {
System.out.println("inside getAsString");
String value1 = value.toString();
return value1;
}
}