“start”无法解析为变量

时间:2012-03-20 12:15:47

标签: java jsp jstl

此代码可以正常工作(减去两个日期之间的天数),但它在Eclipse中显示为错误,我正在尝试弄清楚如何清理它以便它不会出错。我没有写代码,顺便说一句......

<c:set var="start" value="${move.moveStart}"/>
<jsp:useBean id="start" type="java.lang.String"/>
<c:set var="end" value="${move.moveEnd}"/>
<jsp:useBean id="end" type="java.lang.String"/>

<%
int days = 0;
try{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date dstart = sdf.parse(start);
Date dend = sdf.parse(end);
long milsecs = dend.getTime() = dstart.getTime();
days = (int)(milsec/(1000*60*60*24));
}catch(ParseException pe){
;
}
%>

我在sdf.parse(start)和。(end)上得到的错误是“无法解析为变量”。我在这里缺少什么?

2 个答案:

答案 0 :(得分:1)

使用以下代码

   <% pageContext.getAttribute("start"); %>
在scriptlet中

当你使用jstl设置变量时,它默认位于pageContextScope中,因此你可以从pageContext中获取它

答案 1 :(得分:1)

由于您的此对象名为move,并且您的计算似乎都不依赖于请求,为什么不在此对象上添加方法getDuration,这基本上是

@Transient
public int getDuration() {
    int days = 0;
    try{
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
         Date dstart = sdf.parse(start);
         Date dend = sdf.parse(end);
         long milsecs = dend.getTime() = dstart.getTime();
         days = (int)(milsec/(MILLIS_IN_A DAY)); 
    }catch(ParseException pe){
    ;
    }
    return days;
}

这样你就可以在你的jsp中说

<c:out value = "${move.duration}"/>

可以通过查看此答案https://stackoverflow.com/a/3300078/9422

来实现getDuration方法