我有大量数据,想要以一些格式显示数据
这个方法基本上是这样的:
@ManagedOperation(description = "return html")
@ManagedOperationParameters({@ManagedOperationParameter(name = "someVal", description = "text")})
public String returnAsHtml(String someVal)
{
return "some formatted xml";
}
看起来XSLTProcessor可以配置为使用XSLT模板。但是我在MX4J的上下文中使用XSLT for html转换在互联网上找不到任何示例。任何人都可以提供示例XSLT模板吗?
答案 0 :(得分:1)
如果有人回到这个问题,我会想到两件事:
1)MX4J有几个HttpCommandProcessorAdaptor的默认实现。这些操作从路径映射。对于JMX操作(在Spring的说法中称为ManagedOperation),MX4J使用像/ invoke这样的URL?operation = returnAsHtml
这将被传递给InvokeOperationCommandProcessor以创建一个XML文档,其结果只是你返回的任何东西的toString(),在一个名为'return'的属性中。它还在名为“returnclass”的属性中传回返回类型。如果只是将&template=identity
添加到调用URL,则可以看到所有这些。
我提到这一切是因为一个选项是实现你自己的'invoke.xsl'。 MX4J中的那个只调用renderobject模板:
瞧,你可以在mbean_attributes.xsl找到这个,并且评论显示完全你需要做什么:
<xsl:template name="renderobject">
<xsl:param name="objectclass"/>
<xsl:param name="objectvalue"/>
<xsl:choose>
<xsl:when test="$objectclass='javax.management.ObjectName'">
<xsl:variable name="name_encoded">
<xsl:call-template name="uri-encode">
<xsl:with-param name="uri">
<xsl:value-of select="$objectvalue"/>
</xsl:with-param>
</xsl:call-template>
</xsl:variable>
<a href="/mbean?objectname={$name_encoded}">
<xsl:value-of select="$objectvalue"/>
</a>
</xsl:when>
<xsl:otherwise>
<!-- Use the following line when the result of an invocation
returns e.g. HTML or XML data
<xsl:value-of select="$objectvalue" disable-output-escaping="true" />
-->
<xsl:value-of select="$objectvalue"/>
</xsl:otherwise>
</xsl:choose>
将'disable-output-escaping'设置为true将可以解决问题
2)另一种选择是编写自己的HttpCommandProcessorAdaptor,并在HttpAdapter上设置它。这可以替换'invoke'处理器,也可以换一个全新的处理器。
希望有所帮助
答案 1 :(得分:0)
我想到的一种方法是在XSL模板中使用java脚本来提取和解析字符串。确保测试浏览器(IE vs Non IE)并使用正确的解析器。