2017-10-12 6 views
0

J'ai une table pour afficher le nom du service et la date de serviceComment indiquer que la date est dans les 60 jours en jsp?

Je Wirte ce code et il fonctionne très bien:

<display:table name="${serviceList}" class="its" uid="row" 
     sort="list" pagesize="10" requestURI="serviceMaint_view" export="false" defaultsort="2" defaultorder="descending" id="serviceTable"> 
    <display:column style="width: 30%" title="Service Name" property="serviceName" /> 

    <display:column style="width: 10%" title="Service Date" property="serviceDate" format="{0,date,dd-MM-yyyy}" /> 
</display:table> 

Je fais une autre colonne pour indiquer la date de service est dans les 60 jours, pour Par exemple, si la date de service est dans les 60 jours, la colonne affichera "Service en cours" alors que si la date de service est supérieure à 60 jours, il n'y aura pas d'indicateur dans la colonne (laissez la colonne vide). J'ai lu cet article How to add 30 days in a timestamp in jstl. J'applique la solution dans <display:column>, mais cela ne fonctionne pas (montrera le code ci-dessous). Je pense que certains taglib manquent donc je les ajoute dans le code mais ça ne marche toujours pas.

<%@ taglib prefix="s" uri="/struts-tags"%> 
<%@ taglib uri="http://displaytag.sf.net" prefix="display"%> 
<%@ taglib prefix="sj" uri="/struts-jquery-tags"%> 
<%@ page language="java" import="java.util.*,common.utility.*" 
pageEncoding="UTF-8"%> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%> 
<%@page import="java.text.DateFormat"%> 
<%@page import="java.util.*"%> 
<%@page import="java.text.SimpleDateFormat"%> 
<%@page import="java.util.Calendar" %> 
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 
<%@ taglib uri = "http://java.sun.com/jsp/jstl/fmt" prefix = "fmt" %> 

<display:table name="${serviceList}" class="its" uid="row" 
     sort="list" pagesize="10" requestURI="serviceMaint_view" export="false" defaultsort="2" defaultorder="descending" id="serviceTable"> 
    <display:column style="width: 30%" title="Service Name" property="serviceName" /> 

    <display:column style="width: 10%" title="Service Date" property="serviceDate" format="{0,date,dd-MM-yyyy}" /> 

<display:column> 
    <% 
    Date date= serviceDate; //serviceDate cannot be resolved to a variable 
    Calendar cal = Calendar.getInstance(); 
    cal.setTime (date); 
    cal.add (Calendar.DATE, 60); 
    date = cal.getTime(); //Type mismatch: cannot convert from java.util.Date to java.sql.Date 
    %> 
    <c:if test="${serviceDate ge date}"> 
    <c:out value = "Service in use" /> 
    </c:if> 

</display:column>  

<!--also try to use <s:if> but still get error --> 

<display:column> 
<% 
Date date= serviceDate; //serviceDate cannot be resolved to a variable 
Calendar cal = Calendar.getInstance(); 
cal.setTime (date); 
cal.add (Calendar.DATE, 60); 
date = cal.getTime(); //Type mismatch: cannot convert from java.util.Date 
to java.sql.Date 
%> 
    <s:if tests='%{#serviceDate ge date}'> 
    Service in use 
    </s:if> 


</display:column> 

</display:table> 

Je vois un post mentions à mettre dans le contrôleur pour le faire. (désolé je oublie quel poste) Si dans le contrôleur, cela signifie que l'indicateur doit stocker dans la base de données? Si stocker dans la base de données, je pense que l'enregistrement deviendra statique et ne peut pas être changé à moins que je le modifie dans la base de données, alors comment le programme «connaît» la date de service est ou pas dans les 60 jours?

Je ne sais pas comment indiquer que la date est dans les 60 jours dans <display:column>? Avez-vous une idée à ce sujet? Je vous remercie.

Répondre

0

(S'il vous plaît noter que j'ai une idée et ce n'est peut-être pas une bonne solution mais cela convient à mon cas, donc je suis l'idée de résoudre le problème et je voudrais poster ici comme réponse).

Tout d'abord, obtenez la date de service par variable.

Ensuite, ajoutez 60 jours à la date du service et faites-en une variable. Puis, faites le calcul pour connaître le jour pour déterminer si la date de service est dans les 60 jours ou non.