我有一个扩展 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 类中进行哪些更改?
最佳答案
我的问题(我的需要)与此线程中的问题几乎相同:JSP tag file that either outputs its body or returns it in a variable
但是,该线程中的答案与在 .tag
文件中编写标记库代码有关,这对我来说是新的。我所知道的关于编写标签库的就是将其编码为 java 类。这就是我创建这个线程的原因。
尽管如此,我还是从上述线程中获取了一些提示/帮助,并制定了自己的解决方案:
我使用这行文本作为我的解决方案 - 我知道调用者可以通过将自定义标记包装在 c:set 中来实现此目的,但这比简单地声明“var”不太优雅
这是代码:
<c:set var="optin">
<i:scope type="paramData" scope="${scope}" paramNum="40100"/>
</c:set>
没有对标签库 java 类进行任何更改..
关于java - 将结果(返回值)输出到变量而不是打印出来的 JSP 标记文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27478584/