【问题标题】:JSP Tag file that outputs the result (return value) to a variable instread of printing it out将结果(返回值)输出到变量而不是打印出来的 JSP 标记文件
【发布时间】:2014-12-15 06:36:36
【问题描述】:

我有一个扩展 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 中使用这个标记类:

<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 类中做哪些更改?

【问题讨论】:

    标签: java jsp jstl taglib


    【解决方案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类没有做任何改动..

    【讨论】:

      【解决方案2】:

      显然你可以使用 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
      

      【讨论】:

      • 感谢您的回复。实际上,我在这里面临的问题不在于如何格式化日期。我需要对自定义 JSP 标记类进行编码,以便将计算的值/结果存储到一个变量中,然后可以在 JSP 中使用该变量
      • 那么您的问题是您不知道如何将范围值存储到 JSP 页面中的变量中?
      • 我想使用我的标签,如下所示: - 这样标签类的返回值将是放入 var - “结果”
      • 我不确定这是你想要的,但你可以试试: 现在你可以看到这个变量值,如: 如果您在请求中请求您的值,就是这种情况。
      猜你喜欢
      • 2014-07-22
      • 2011-08-21
      • 2012-06-29
      • 2021-10-16
      • 2016-03-08
      • 1970-01-01
      • 2011-12-19
      • 2022-01-07
      • 1970-01-01
      相关资源
      最近更新 更多