xalan validation java.lang.NoSuchMethodException:用于扩展函数

时间:2012-08-24 05:37:23

标签: java validation xslt xalan

我尝试在页面中验证数据。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:item="http://www.myspace.com/item"
    xmlns:shop="xalan://my.app.xslt.model.Shop" xmlns:valid="xalan://my.app.xslt.validation.ShopValidator"
    xmlns:exsl="http://exslt.org/common">

我有一个带字段的模型,以及带有检查每个字段的方法的类验证器。

并在行

<xsl:if test="valid:isNotEmptyData(shop:getOwner($item)) != true()">
            <error message="The field OWNER is empty." />
        </xsl:if>

我得到NoSuchMethodExtension虽然我有模特

public class Shop{
  private String owner;
  public String getOwner(){
    return owner;
  }
}

在验证器类

public static boolean isNotEmptyData(String model){
  retutn model.isEmpty();
}

你能帮助我吗?

1 个答案:

答案 0 :(得分:1)

你的方法Shop.getOwner()没有参数,而在XSLT中你用一个参数称它为shop:getOwner($item)) - XSLT处理器查找一个带有一个参数的方法但找不到它,因此错误。

我不确定getOwner()应该做什么 - 可能从其参数中提取一些值...?在这种情况下,您应该修改它以接受参数并处理它。

顺便说一下,

valid:isNotEmptyData(shop:getOwner($item)) != true()

可以使用标准XPath函数编写

 not(string(shop:getOwner($item)))

(如果字符串非空,则认为是字符串)或

string-length(shop:getOwner($item)) = 0