您的错误是初始化变量,例如
<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。你可以在这里阅读