2010-04-13 8 views
0

Voici une petite application de test qui fait des choses suivantesStruts2 avec s: tag d'action

  1. demander à l'utilisateur d'entrer son nom et de soumettre - (index.jsp)
  2. en raison de index.jsp est la page welcome.jsp qui demande à l'utilisateur de choisir son/son groupe sanguin

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%> 
<%@ taglib prefix="s" uri="/struts-tags" %> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
    <head> </head> 
    <body> 
    <form action="MyName"> 
    <s:textfield name="UserName" label="Enter Your Name"/> 
    <s:submit/> 
    </form><br> 
    </body> 
</html>  

struts.xml

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> 
<struts> 
<package name="module1" namespace="" extends="struts-default"> 
<action name="MyName" class="module1.User"> 
    <result>/Welcome.jsp</result> 
</action> 
<action name="Blood_Group" class="module1.SelectBloodGroup" method="bloodGroupList"/> 
</package> 

</struts> 

SelectBloodGroup.java

package module1; 

import java.util.ArrayList; 
import com.opensymphony.xwork2.ActionSupport; 
public class SelectBloodGroup extends ActionSupport{ 
    private ArrayList<BloodGroup> bglist; 

    public String bloodGroupList(){ 
     bglist = new ArrayList<BloodGroup>(); 
     bglist.add(new BloodGroup("1","A+")); 
     bglist.add(new BloodGroup("2","B+")); 
     bglist.add(new BloodGroup("3","AB+")); 
     bglist.add(new BloodGroup("4","O+")); 
     bglist.add(new BloodGroup("5","A-")); 
     bglist.add(new BloodGroup("6","B-")); 
     bglist.add(new BloodGroup("7","AB-")); 
     bglist.add(new BloodGroup("8","O-")); 
     return "SUCCESS"; 
    } 

    public ArrayList<BloodGroup> getBglist(){ 
     return bglist; 
    } 

} 
class BloodGroup{ 
    private String id; 
    private String bg; 

    BloodGroup(String id,String bg){ 
     this.id=id; 
     this.bg=bg; 
    } 

} 

welcome.jsp

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%> 
<%@ taglib prefix="s" uri="/struts-tags" %> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
    <head> 

    </head> 

    <body> 
    <s:action name="Blood_Group" executeResult="false"/>  

    //***************here is the problem*************** 
    <s:select list="bglist" listKey="id" listValue="bg"/> 
    //*********************************************** 

    </body> 
</html> 

Struts est incapable d'identifier bglist comme une collection ou Array Liste ou iterator. QUE DOIS-JE ATTRIBUER A LA LIST ATTRIBUER DANS LE s: sélectionnez TAG DANS LE FICHIER welcome.jsp

Quel est le problème avec le code s'il vous plaît dites-moi en détail. Si vous pouviez m'envoyer la version corrigée. POURQUOI L'Étiquette <s:action> ne fonctionne pas?

C'est l'erreur que je reçois

13 avril 2010 13:49:19 org.apache.catalina.core.ApplicationDispatcher invoquez GRAVES: Servlet.service() pour servlet jsp jeté exception tag 'select', champ 'list': La clé de liste 'bglist' demandée n'a pas pu être résolue en tant que collection/array/map/enumeration/itérateur type. . Exemple: les gens ou les gens {name} - [lieu inconnu]

Répondre

0

Il semble que comprennent mal le flux struts2 de base.

La page welcome.jsp est la page résultat (vue) de l'action "MyName" (nom incorrect, BTW). Cela signifie que lorsque la page welcome.jsp est générée, l'action "MyName" (class module1.User) vient d'être "exécutée", et c'est cet objet (une instance de class module1.User) celui qui est dans le présenter "scope" (la pile de valeur) lorsque le résultat est affiché. Ainsi, le fichier welcome.jsp recherche la liste "bglist" dans la classe module1.User.

Vous devez repenser vos mappages d'actions.

(Votre confusion peut être lié à votre déclaration « à la suite de index.jsp est la page welcome.jsp » ... vous devez penser pages jsp comme résultat des actions, et non pas d'autres JavaServer)

0

bglist est déclaré et défini dans l'action SelectBloodGroup qui n'est jamais entré dans son contexte. Le flux de votre application est Index.jsp (submit) -> module1.User (Action) -> bienvenue.jsp, donc bglist n'a jamais été instancié ni votre classe SelectBloodGroup a été appelée. Si vous voulez utiliser initialiser votre bglist dans Action, placez-le dans module1.User ou vous pouvez également donner des valeurs de liste dans jsp si ces valeurs vont être codées en dur (ça semble être) ou pour les meilleures pratiques vous pouvez utiliser des regroupements de ressources pour les valeurs statiques (mieux que le codage en dur).

Pour donner des valeurs codées en dur jsp Liste Sélectionnez vous pouvez utiliser le code ci-dessous:

<select name="bgList" id="bgListId"> 
    <option value="1">Bpositive</option> 
    <option value="someValue">someLabel</option> 
</select> 

S'il vous plaît essayer d'utiliser modèle camelCase alors que les variables déclarant. J'espère que cela aide.

Questions connexes