2017-06-27 3 views
-1

j'avais un champ de texte dans Struts 2 définie commegetter ne fonctionne pas lors de la conversion de textfield à la propriété dans Struts 2

<s:textfield key="fName" label="First Name" readonly="true" /> 

et les apporteurs travaillaient très bien, mais comme il était censé être seulement un affichage seul champ, je l'ai changé à

<div> <br /> First Name: <s:property value="fName" /></div> 

et maintenant le getter obtient une exception NullPointerException.

Existe-t-il un moyen de contourner cette erreur? grâce

getter dans Person.java:

public String getFName() { 
return fName; 
} 

stacktrace:

test.model.Person.getFName(Person.java:43) 
test.service.PersonDAO.update(PersonDAO.java:182) 
test.action.UpdatePersonInfo.execute(UpdatePersonInfo.java:46) 
+0

@Aleksandr M getter et la piletrace pertinente ajoutée. Comme je l'ai dit, il n'y a pas NPE si je remplace la propriété par textfield – user1005585

+0

Vous voulez dire que vous obtenez NPE après avoir soumis le formulaire? Utilisez un champ caché. Lisez aussi https://struts.apache.org/docs/struts-23-to-25-migration.html#Struts2.3to2.5migration-Fieldnames. –

+0

@ user1005585 mais la valeur est vide correcte (si vous utilisez le champ de texte)? Si tel est le cas ... alors utilisez quelque chose comme l'utilisateur n'est pas connecté [fournir un lien de connexion], Bien que ce soit un peu un hack, je déplacerais la vérification au getter et retournerais une chaîne vide si elle est nulle là. – Quaternion

Répondre

0

Vous devez être prudent nom de la variable de classe choix, en vous cas fName. Avec la nouvelle version de Struts 2 qui utilise une version plus récente d'OGNL, certains getter/setter ne fonctionnent pas correctement. C'est parce que OGNL plus récent suit la spécification du bean Java. Donc, votre getter serait

public String getfName() { 
     return fName; 
    } 
+0

Merci, j'ai essayé ça. Et il lance toujours un NPE sur le formulaire submit avec l'élément de propriété, mais pas avec l'élément textfield. – user1005585

+0

Puisque vous utilisez des entretoises 2.3.15 votre méthode getter est correcte. Avez-vous débogué votre classe d'action? – want2learn

+0

Oui, je l'ai fait avec les éléments textfield et property. Lorsqu'il est utilisé avec le champ de texte, le getter renvoie une valeur. Mais avec la propriété, c'est comme si la valeur ne se remplissait pas automatiquement et donc une NPE. – user1005585