JSP标记文件,将结果(返回值)输出到变量而不是将其打印出来

时间:2014-12-15 06:36:36

标签: java jsp jstl taglib

我有一个扩展TagSupport类的自定义JSP标记文件(Java类)。在这个类中,我有doEndTag方法来计算某些东西,输出的编写如下所示:

public class ScopeTag extends TagSupport {
    private Scope scope;
    public int doEndTag() throws JspTagException {
        String content = null;
        content = String.valueOf(srs.getParameterDatasByScope(scope).size()); // src is my service class
        pageContext.getOut().print((content == null) ? "" : content);
        return EVAL_PAGE;
    }
}

现在我在JSP中使用此Tag类:

<td><i:scope type="numOfParamData" scope="${scope}"/> parameter rules</td>

现在我不想在td元素中打印值,而是将其存储到变量中以便进一步处理。比方说,我想看到它的返回值是否为0。

我想编写Tag Java类,以便我可以使用类似于JSTL标记fmt:parseDate的标记,如下所示。

<fmt:parseDate value="${now}" var="parsedEmpDate" pattern="dd-MM-yyyy" />  
<p>Parsed Date: <c:out value="${parsedEmpDate}" /></p>  

此处结果(格式化数据)存储在变量parsedEmpDate

所以为了实现类似fmt:parseDate的东西,我必须在Tag类中做些什么改变?

2 个答案:

答案 0 :(得分:1)

我的问题(我的需要)与此帖子中的问题几乎相同:JSP tag file that either outputs its body or returns it in a variable

但是,此主题中的答案与在.tag文件中编写标记库代码有关,这对我来说是新的。我在编写标记库时所知道的就是将其编码为java类。这就是我创建这个帖子的原因。

然而,我继续从上面的线程中获取一些提示/帮助,并制定了我自己的解决方案: 我使用这一行文字作为我的解决方案 - I know that the caller can achieve this by wrapping the custom tag in a c:set, but this is less elegant than simply declaring a "var"

以下是代码:

<c:set var="optin">
   <i:scope type="paramData" scope="${scope}" paramNum="40100"/>
</c:set>

未对标记库java类进行任何更改..

答案 1 :(得分:0)

显然你可以使用SimpleDateFormat http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html;

示例:

Date today = new Date();

        //If you print Date, you will get un formatted output
        System.out.println("Today is : " + today);

        //formatting date in Java using SimpleDateFormat
        SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("dd-MM-yyyy");
        String date = DATE_FORMAT.format(today);
        System.out.println("Today in dd-MM-yyyy format : " + date);

        //Another Example of formatting Date in Java using SimpleDateFormat
        DATE_FORMAT = new SimpleDateFormat("dd/MM/yy");
        date = DATE_FORMAT.format(today);
        System.out.println("Today in dd/MM/yy pattern : " + date);

        //formatting Date with time information
        DATE_FORMAT = new SimpleDateFormat("dd-MM-yy:HH:mm:SS");
        date = DATE_FORMAT.format(today);
        System.out.println("Today in dd-MM-yy:HH:mm:SS : " + date);

        //SimpleDateFormat example - Date with timezone information
        DATE_FORMAT = new SimpleDateFormat("dd-MM-yy:HH:mm:SS Z");
        date = DATE_FORMAT.format(today);
        System.out.println("Today in dd-MM-yy:HH:mm:SSZ : " + date);

<强>输出:

Today is : Fri Nov 02 16:11:27 IST 2012
Today in dd-MM-yyyy format : 02-11-2012
Today in dd/MM/yy pattern : 02/11/12
Today in dd-MM-yy:HH:mm:SS : 02-11-12:16:11:316
Today in dd-MM-yy:HH:mm:SSZ : 02-11-12:16:11:316 +0530