我想迭代ArrayList <String>
并将所有字符串放到输出树中,但不知道该怎么做。
java方法:
public ArrayList<String> getErrorList(String name) {
if (errorMap.containsKey(name)) {
return errorMap.get(name);
}
return new ArrayList<>();
}
xsl文件:
<xsl:variable name="list">
<xsl:value-of select="validator:getErrorList($validator, 'model')"/>
</xsl:variable>
<tr>
<td style="color: red;">
<ul>
<li> first string from ArrayList </li>
. . .
<li> last string from ArrayList </li>
</ul>
</td>
</tr>
我对xsl很新,所以我请你帮忙。
答案 0 :(得分:5)
你的错误是初始化变量,如
<xsl:variable name="list">
<xsl:value-of select="validator:getErrorList($validator, 'model')"/>
</xsl:variable>
因为xslt认为,这个变量的值是#STRING
,所以你会有错误
对于扩展函数,找不到方法java.util.ArrayList.size([ExpressionContext,] #STRING)。
您必须使用下一个声明,而不是之前的声明:
<xsl:variable name="list" select="validator:getErrorList($validator, 'model')"/>
因此,方法getErrorList
将返回ArrayList
个对象。
下一代码将向您展示如何使用XSL功能迭代ArrayList集合:
<xsl:variable name="list" select="validator:getErrorList($validator, 'model')"/>
<xsl:variable name="length" select="list:size($list)"/>
<xsl:if test="$length > 0">
<xsl:call-template name="looper">
<xsl:with-param name="iterations" select="$length - 1"/>
<xsl:with-param name="list" select="$list"/>
</xsl:call-template>
</xsl:if>
. . .
<xsl:template name="looper">
<xsl:param name="iterations"/>
<xsl:param name="list"/>
<xsl:if test="$iterations > -1">
<xsl:value-of select="list:get($list, $iterations)"></xsl:value-of>
<xsl:call-template name="looper">
<xsl:with-param name="iterations" select="$iterations - 1"/>
<xsl:with-param name="list" select="$list"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
所以,你必须使用递归,因为它不可能在函数式语言中使用循环,例如XSLT。你可以阅读它here
答案 1 :(得分:1)
您必须在样式表中为Java扩展函数定义命名空间。
它应该看起来像xmlns:yourchoice = "javapackage.classname
。
假设方法getErrorList在类ErrorListClass中,它可能如下所示:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:validator="mypackage.ErrorListClass"
exclude-result-prefixes="filecounter" version="1.0">
然后你在XSLT中调用它
<xsl:variable name="list">
<xsl:value-of select="validator:getErrorList($validator, 'model')"/>
</xsl:variable>
我希望有所帮助。
祝你好运, 彼得