BeanelResolver에서 올바르게 이름을 확인하는 방법
문제
다음 속성이있는 Java에서 매우 특정한 클래스로 작업해야합니다.
protected SPSExchangedDocumentType spsExchangedDocument;
public SPSExchangedDocumentType getSPSExchangedDocument() {
return spsExchangedDocument;
}
.
JSP 페이지 내에서 해당 클래스의 인스턴스를 사용합니다.
<c:out value = "${certificate.spsExchangedDocument.id.value}"/>
다음 예외를 throw합니다.
javax.el.propertynotFoundException : 클래스 'un.unece.uncefact.data.standard.spscertificate._5.SPSertificateType' 'spsexchangedDocument'속성이 없습니다. ...에서 javax.el.beanelresolver.getBeanProperty (beanelresolver.java:579) AT. javax.el.beanelresolver.getValue (beanelresolver.java:281) AT. 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) ...에서 org.apache.jasper.runtime.pageContextImpl.EvaluateExpression (pageContextimpl.java:1001)
나는 그 문제가 spsexchangedDocument 이라는 을 getSPSexChangedDocument 이라는 이라고 불리는이 문제가 있다고 생각한다. XSD에서 자동으로 생성 될 수 없기 때문에 클래스의 코드를 변경할 수 없으므로 변경할 수 없으므로 페이지를 변경해야합니다. 그러나 EL이 제대로 해결하기 위해서는 어떤 이름을 사용해야합니까?
- spsexchanged 문서.
- spsexchanged 문서.
- spsexchanged 문서.
Java와 EL에서 그러한 명명 규칙에 대한 규칙은 무엇입니까?
해결책
BeanELResolver
구현이 JavaBeans spec :
8.8 유추 된 이름의 대문자.
이렇게하면 중간에서 재산 또는 이벤트 이름을 추출 할 때 기존 Java 이름, 우리는 일반적으로 첫 번째 문자를 낮추어 케이스. 그러나 모든 대문자 이름의 가끔 사용을 지원하기 위해서는, 이름의 처음 두 문자가 모두 대문자인지 확인합니다. 그리고 그렇다면 혼자 남겨주세요. 예를 들어,
the 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());
}
}
}
.