Question

nous devons travailler avec une classe très spécifique en Java qui possède la propriété suivante :

protected SPSExchangedDocumentType spsExchangedDocument;

public SPSExchangedDocumentType getSPSExchangedDocument() {
  return spsExchangedDocument;
}

J'utilise l'instance de cette classe dans une page jsp :

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

Cela me renvoie l'exception suivante :

javax.el.PropertyNotFoundException :La classe 'un.unece.uncefact.data.standard.spscertificate._5.SpsCertificateType' n'a pas la propriété 'SPSExChangedDocument'.à javax.el.beanelresolver.getBeanProperty (benelresolver.java:579) à javax.el.beanelresolver.getvalue (benelresolver.java:281) à javax.el.compositelresolver.getvalue (compositeleresolver.java:175) à com.sun. el.parser.astvalue.getValue (AstValue.java:138) sur com.sun.el.valuexpressionmpl.getValue (valeurxpressionmpl.java:206) à org.apache.jasper.runtime.pageConTextImpl.

Je pense que le problème vient directement du fait que la propriété s'appelle spsExchangedDocument, mais la méthode s'appelle getSPSExchangedDocument.Je ne peux pas changer le code de la classe, car il est généré automatiquement à partir de XSD, que nous ne pouvons pas modifier, je devrais donc changer la page.Mais quel nom dois-je utiliser pour que EL le résolve correctement :

  • spsExchangedDocument.
  • SPSExchangedDocument.
  • sPSExchangedDocument.

Quelle est la règle pour de telles conventions de dénomination en Java et EL ?

Était-ce utile?

La solution

En supposant que BeanELResolver la mise en œuvre est conforme à la spécification JavaBeans:

8.8 Capitalisation des noms déduits.

Ainsi, lorsque nous extrayons une propriété ou un nom d'événement à partir du milieu d'un nom Java existant, nous convertissons normalement le premier caractère en minuscules.Cependant, pour soutenir l'utilisation occasionnelle de tous les noms des cas supérieurs, nous vérifions si les deux premiers caractères du nom sont à la fois supérieurs et si oui, laissez-le tranquille.Ainsi par exemple,

  • "FooBah" devient "fooBah"
  • "Z" devient "z"
  • « URL » devient « URL »

Le API java.beans résout le nom de la propriété comme 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());
    }
  }
}

Cela dit, il y a déjà eu des bugs dans ce domaine.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top