2017-05-29 3 views
0

Je cette index.jsp:Évitez une boucle en page d'index

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<%@ taglib prefix="s" uri="/struts-tags"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd"> 

<html> 
<head> 
</head> 
<body> 
<h2>Simple Iterator</h2> 
<ol> 
<s:iterator value="comboMeals"> 
    <li><s:property /></li> 
</s:iterator> 
</ol> 

<h2>Iterator with IteratorStatus</h2> 
<table> 
<s:iterator value="comboMeals" status="comboMealsStatus"> 
    <tr> 
    <s:if test="#comboMealsStatus.even == true"> 
     <td style="background: #CCCCCC"><s:property/></td> 
    </s:if> 
    <s:elseif test="#comboMealsStatus.first == true"> 
     <td><s:property/> (This is first value) </td> 
    </s:elseif> 
    <s:else> 
     <td><s:property/></td> 
    </s:else> 
    </tr> 
</s:iterator> 
</table> 
</body> 
</html> 

Ceci est mon classe Java:

import java.util.ArrayList; 
import java.util.List; 

import com.opensymphony.xwork2.ActionSupport; 

public class IteratorKFCAction extends ActionSupport{ 

    private List<String> comboMeals; 

    public List<String> getComboMeals() { 
     return comboMeals; 
    } 

    public void setComboMeals(List<String> comboMeals) { 
     this.comboMeals = comboMeals; 
    } 

    public String execute() { 

     comboMeals = new ArrayList<String>(); 
     comboMeals.add("Snack Plate"); 
     comboMeals.add("Dinner Plate"); 
     comboMeals.add("Colonel Chicken Rice Combo"); 
     comboMeals.add("Colonel Burger"); 
     comboMeals.add("O.R. Fillet Burger"); 
     comboMeals.add("Zinger Burger"); 

     return SUCCESS; 
    } 
} 

Mon idée était appeler directement l'action de remplir la page d'index, je mets cette ligne dans les balises de tête de index.jsp

<META HTTP-EQUIV="Refresh" CONTENT="0;URL='start.do'"> 

Mais avec ce correctif, je reçois que la page entrer dans une « boucle rafraîchissement ». Est-il possible d'appeler directement à partir du code de l'action, de cette façon je n'ai pas besoin de le configurer manuellement via l'URL dans le navigateur.

J'ai essayé aussi une deuxième solution en ajoutant au corps de index.jsp ce code:

<s:action name="iteratorKFCAction" executeResult="true" /> 

où iteratorKFCAction est l'action spécifiée dans struts.xml qui rappellent les IteratorKFCAction. Dans ce cas, la boucle d'action.

+0

Rediriger loin de la index.jsp. index.jsp -> action -> some.jsp. –

+0

Non, je veux simplement montrer directement l'action dans index.jsp. C'est possible? – NxA

+1

Même si quelque chose est possible, cela ne veut pas dire que c'est une bonne idée. Tag est une balise legacy que vous ne devriez jamais utiliser sur un nouveau développement, et l'astuce meta refresh est une autre mauvaise pratique du passé ... ne pouvez-vous pas simplement utiliser une action comme page de bienvenue, ou un jsp redirigeant vers une action? –

Répondre

2

Le but principal de Struts2 (et tous les autres frameworks MVC) est d'acheminer l'URL d'une action (le contrôleur) qui préparent des données (dans votre cas comboMeals) et déterminer un résultat (dans votre cas toujours SUCCESS) qui est mis en correspondance avec un modèle (la vue), dans votre cas index.jsp

dans votre struts.xml vous devriez avoir quelque chose comme

<action name="start.do" class="com.xxx.IteratorKFCAction"> 
    <result name="SUCCESS">/WEB-INF/.../index.jsp</result> 
</action> 
+0

'start.do' comme nom d'action? Habituellement, la partie après '.' est une extension d'action. –