【问题标题】:Alternative for Jackson ObjectMapperJackson ObjectMapper 的替代品
【发布时间】:2012-02-22 14:18:39
【问题描述】:
我正在寻找与 Jackson ObjectMapper 一起使用或代替的 taglib。我正在升级我们的网站,我们不允许在 JSP 文件中使用内联代码块。所以我需要找到一些可以解决我的问题的标签库。
<jsp:useBean id="mapper" class="org.codehaus.jackson.map.ObjectMapper" />
<%=mapper.writeValueAsString(pageContext.getAttribute("result"))%>
但我不能把它转换成这样的东西:
<c:out value="${mapper.writeValueAsString(pageContext.getAttribute('result'))}"></c:out>
这会引发异常:
如果没有指定默认命名空间,函数 writeValueAsString 必须使用前缀
谢谢。
【问题讨论】:
标签:
java
jsp
jstl
jackson
taglib
【解决方案1】:
定义一个自定义的 JSTL 函数:
.
<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
version="2.1">
<tlib-version>1.0</tlib-version>
<short-name>functions</short-name>
<uri>http://foo.com/tags</uri>
<function>
<name>getJSON</name>
<function-class>com.....ObjectMapper</function-class>
<function-signature>String writeValueAsString(java.lang.String)</function-signature>
</function>
</taglib>
那么你就可以和f:getJSON(..)一起使用了
但通常,在 JSP 中执行此操作可能不正确 - 在控制器/servlet 中预先计算,并将其添加为模型属性。
【解决方案2】:
我通过在 WEB-INF 文件夹中的 .tag 文件中实现功能解决了这个问题,我们允许内联编码。不完全是最好的解决方案,但它确实有效。