2014-02-26 16 views
1

妥善解决这个名字大家都在Java中一个非常具体的类,它具有以下性质的工作:如何通过BeanELResolver

protected SPSExchangedDocumentType spsExchangedDocument; 

public SPSExchangedDocumentType getSPSExchangedDocument() { 
    return spsExchangedDocument; 
} 

我使用的类的实例JSP页面中:

<c:out value = "${certificate.spsExchangedDocument.id.value}"/>

它抛出我下面的例外:

javax.el.PropertyN otFoundException:类 'un.unece.uncefact.data.standard.spscertificate._5.SPSCertificateType' 没有属性'spsExchangedDocument'。在 javax.el.BeanELResolver.getBeanProperty(BeanELResolver.java:579)在 javax.el.BeanELResolver.getValue(BeanELResolver.java:281)在 javax.el.CompositeELResolver.getValue(CompositeELResolver.java:175) 在com.sun.el.parser.AstValue.getValue(AstValue.java:138)at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:206) at org.apache.jasper.runtime.PageContextImpl.evaluateExpression (PageContextImpl.java:1001)

我认为这个问题是直接与事实,该属性被称为spsExchangedDocument,但满足hod被称为getSPSExchangedDocument。我无法更改类的代码,因为它是从XSD自动生成的,我们无法更改,所以我应该更改页面。但是我应该使用什么名字才能让EL正确解析:

  • spsExchangedDocument。
  • SPSExchangedDocument。
  • sPSExchangedDocument。

无论如何,这些命名约定在java和EL中的规则是什么?

+1

一般来说,getters和setters的命名是第一个字符大写并且前面带有get/set的属性的名称。所以请试用getSpsExchangedDocument。通常这可以由您选择的IDE生成。 –

+0

再一次 - 我无法更改吸气剂的名称,因为它是由Jaxb工具自动生成的。 –

回答

1

假设BeanELResolver实现符合the JavaBeans spec:推断的名字

8.8资本。

因此,当我们从 现有的Java名称中间提取属性或事件的名称,我们通常转换的第一个字符,以降低 情况。但是,为了支持偶尔使用全部大写字母的名称,我们检查名称的前两个字符是否都是大写字母 ,如果是这样,请单独使用。因此,例如,

  • “FooBah”变成“fooBah”
  • “Z”变成了“Z”
  • “URL”变成“URL”

java.beans API解决财产名称为SPSExchangedDocument

import java.beans.*; 

public class Bean { 
    public Object getSPSExchangedDocument() { 
    return null; 
    } 

    public static void main(String[] args) throws IntrospectionException { 
    BeanInfo info = Introspector.getBeanInfo(Bean.class); 
    for (PropertyDescriptor prop : info.getPropertyDescriptors()) { 
     System.out.println(prop.getName()); 
    } 
    } 
} 

也就是说,之前在这个领域出现过错误。

+0

谢谢,这已经解决了我的问题。 –