Как правильно разрешить имя с помощью BeanELResolver

StackOverflow https://stackoverflow.com//questions/22040812

  •  21-12-2019
  •  | 
  •  

Вопрос

нам приходится работать с очень специфическим классом в Java, который имеет следующее свойство:

protected SPSExchangedDocumentType spsExchangedDocument;

public SPSExchangedDocumentType getSPSExchangedDocument() {
  return spsExchangedDocument;
}

Я использую экземпляр этого класса внутри страницы jsp:

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

Это вызывает у меня следующее исключение:

javax.el.PropertyNotFoundException:Класс '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 (composity.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.coselelresolver.getvalue (composity.javaava. el.parser.astvalue.getvalue (astvalue.java:138) на com.sun.el.valueexpressionImpl.getValue (valueExpressionImpl.java:206) at org.apache.jasper.runtime.pagecontextimpl.evaluateexpression (pagecontexplemplemplimplime.1111

Я думаю, проблема непосредственно в том, что свойство называется spsExchangedDocument, но метод называется ПолучитьSPSExchangedDocument.Я не могу изменить код класса, потому что он генерируется автоматически из XSD, который мы не можем изменить, поэтому мне следует изменить страницу.Но какое имя мне следует использовать, чтобы EL правильно его разрешил:

  • spsExchangedDocument.
  • SPSExchangedDocument.
  • sPSExchangedDocument.

Каковы правила таких соглашений об именах в Java и EL?

Это было полезно?

Решение

Предполагая BeanELResolver реализация соответствует спецификация JavaBeans:

8.8. Использование заглавных букв предполагаемых имен.

Таким образом, когда мы извлекаем имя свойства или события из середины существующего имени Java, мы обычно преобразуем первый символ в нижний регистр.Однако, чтобы поддержать случайное использование всех имен в верхнем количестве, мы проверяем, являются ли первые два символа имени, оба верхних регистра, и если это так.Так, например,

  • «ФуБа» становится «ФуБа»
  • «Z» становится «z»
  • «URL» становится «URL»

А API java.beans разрешает имя свойства как 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());
    }
  }
}

Тем не менее, ошибки в этой области уже были.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top