我正在寻找与杰克逊ObjectMapper
一起使用或代替杰克逊{tag}的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必须与前缀一起使用
感谢。
答案 0 :(得分:0)
定义自定义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中预先计算它,并将其添加为模型属性。
答案 1 :(得分:0)
我通过在WEB-INF文件夹中的.tag文件中实现功能来解决这个问题,我们允许在线编码。不完全是最好的解决方案,但它确实有效。