2009-10-23 4 views
1

Dans mes jambes de force 2 d'application J'itérer liste des VO objets dans mon jsp comme suit -struts2: ajouter VO objets dans une liste dans la liste des classes-itérer action objet de liste se jsp dans anothe classe d'action

<s:iterator value="listOfVoObjects"> 
<tr> 
<td><s:property value="itemId" /></td> 
<td><s:property value="itemName" /></td> 
</tr> 
</s:iterator> 

maintenant, je veux obtenir ce « listOfVoObjects » dans ma classe d'action lorsque l'utilisateur cliquera un certain bouton dire « geler » et pour ce faire, je l'ai définie dans caché dans la même page jsp comme -

<s:hidden name = “listOfVoObjects”/> 

et obtenir il dans la classe action en tant qu'objet liste utilisant setter-getter. Il en cours d'exécution, mais donnant la liste en ajoutant deux crochets comme -

[[[email protected], [email protected], [email protected]]]

C'est pourquoi j'obtiens un problème pour l'itérer en utilisant la méthode iterate() dans ma classe d'action.

Merci de nous aider à enlever ce double support carré. sortie désirée est -

[[email protected], [email protected], [email protected]]

ou laissez-moi savoir d'autre solution si possible.

+0

Je ne suis pas sûr de ce que vous faites ici? laissez-vous l'utilisateur éditer/modifier votre liste? ou vous voulez simplement renvoyer ce que vous affichez? Pouvez-vous être plus descriptif que ce que vous essayez de faire? –

Répondre

0

Votre liste devient le chaîne "[[email protected], [email protected], [email protected]]" parce que votre BeforeSaveingReq4Originator ne dispose pas d'une méthode toString, mais n'est pas vraiment le problème.

Le problème est celui de la conversion de type. Il ne semble pas que la liste soit modifiable sur votre page de vue, mais vous ne pouvez peut-être pas la recréer lorsque vous travaillez sur le GET/POST avec lequel vous avez besoin de passer par la page. Sooo .... la première chose dont vous avez besoin est un convertisseur pour créer des objets BeforeSavingReq4OriginatorVO vers et à partir de Strings.

Si ces éléments ne sont stockés nulle part, vous devrez créer une chaîne que vous pourrez ensuite analyser. La plupart du temps c'est une certaine entité persistante et vous pouvez sortir l'id en tant que représentation String et ensuite dire à Struts d'utiliser l'ID pour le charger depuis la base de données quand il veut la représentation de l'objet. Voir la conversion de type Struts pour savoir comment faire.

Ainsi vous obtenez un convertisseur de type fonctionnant pour votre classe. Maintenant la collection. Je ne suis pas sûr que cela fonctionne pour avoir un seul champ avec le nom de la collection et essayer de le reconstruire à partir de la sortie toString de la collection. Peut-être qu'une fois qu'il y a un convertisseur de type et que votre String ressemble à [1,4,5,6], il voit que le setter est une collection, puis essaie de créer des objets VO à partir de chaque "Représentation String".

Si non, je sais que vous pouvez parcourir votre collection et créer des champs cachés pour chaque valeur.

<s:iterator value="listOfValues" status="row"> 
    <s:hidden name="listOfVoObjects[${row.index}]" value="<s:property/>" 
</s:iterator> 

Maintenant vous Struts saura comment créer votre collection en supposant qu'il y a un convertisseur de type.S'il n'y a pas de convertisseur de type alors vous devez créer toute la structure de l'objet sous la forme HTML:

<s:iterator value="listOfValues" status="row"> 
    <s:hidden name="listOfVoObjects[${row.index}].itemId" value="<s:property value="itemId"/>" 
    <s:hidden name="listOfVoObjects[${row.index}].itemName" value="<s:property value="itemName"/>" 
enter code here 
</s:iterator> 

Il y a encore des conséquences de conversion de type en fonction de votre version de Java. Si vous pouvez utiliser Generics et que votre setter cible est List setListOfVoObjects (...) alors Struts peut déterminer le type de bean à créer pour chaque entrée. Si ce n'est pas le cas, il existe des paramètres de conversion de type pour Collections et cartes décrits dans la documentation de Struts.

Dans un fichier appelé [actionName] -conversion.properties vous spécifiez le type de haricot avec quelque chose comme:

Element_listOfVoObjects=originator.vo.BeforeSavingReq4OriginatorVO 

mais vérifier la documentation des entretoises.

0

Here est un exemple de travail (projet Netbeans 6.9) illustrant comment itérer sur un tableau ou une liste d'objets.

De même, comment soumettre le formulaire de sorte que la liste des objets soit recréée lors de la soumission.

Simplement résoudre les références et y aller.

Questions connexes