2008-11-21 5 views
0

J'utilise des entretoises 1.1 avec des carreaux.Comment définir l'URL du corps d'une mosaïque dans la classe d'action Struts?

J'ai carreaux avec des définitions comme

<definition name="cnmp.body.index" extends="cnmp.mainLayout" > 
    <put name="title" value="CNM Portal" /> 
    <put name="bodytitle" value="Home" /> 
    <put name="body" value="/00-CNM_Landing.jsp" /> 
</definition> 

Je veux être en mesure de définir la valeur du paramètre du corps dans ma classe d'action java. Que devrais-je obtenir d'ActionMapping ou d'ActionForm pour cela?

public class TileForwardAction extends Action 
{ 
public ActionForward execute(ActionMapping mapping, ActionForm arg1, 
     HttpServletRequest arg2, HttpServletResponse arg3) throws Exception 
{ 
    return mapping.findForward("theTile");   
} 
} 

le fichier de configuration Struts ressemble

<action-mappings> 

    <action path = "/index" 
      type = "com.bellsouth.snt.cnmp.ui.action.TileForwardAction" 
      scope = "request" 
      input = "cnmp.body.index" 
      parameter= "theTile" 
    >  
     <forward name="theTile" path="cnmp.body.index"/>  
    </action> 

Merci


Inspiré par la réponse acceptée je suis venu avec la solution suivante

Dans la page définie dans la dalle def j'ai le suivant

<% String destAttr=(String)request.getAttribute("dest"); %> 

<jsp:include page="<%=destAttr%>" flush="true" /> 

Dans la classe d'action (parce que je suis paresseux) je les suivantes

request.setAttribute("dest", "landingB.jsp"); 

Et cela a fonctionné.

Répondre

0

Vous pouvez vous intéresser à la prise en charge des tuiles pour les classes de contrôleur. L'entrée de tuiles ressemblerait à quelque chose comme ceci:

<definition 
    name="cnmp.body.index" 
    extends="cnmp.mainLayout" 
    controllerClass="org.yourpackage.YourControllerClass"> 
    <put name="title" value="CNM Portal" /> 
    <put name="bodytitle" value="Home" /> 
    <put name="body" value="/00-CNM_Landing.jsp" /> 
</definition> 

alors la YourControllerClass mettrait en œuvre l'Perform() méthode comme:

public class YourControllerClasss implements Controller 
    public void perform(ComponentContext context, 
     HttpServletRequest request, 
     HttpServletResponse response, 
     ServletContext servletContext) 
     throws ServletException, IOException { 

     //some logic to determine what the 'body' should be 

     if (service.isUp()){ 
     request.setAttribute("nameOfJSPToImport", "/jsps/import-me.jsp"); 
     }else{ 
     request.setAttribute("nameOfJSPToImport", "/jsps/import-me-instead.jsp"); 
     } 

    } 
} 

L'exemple ci-dessus pourrait être fait directement dans votre action sans utilisation de TilesControllers , mais le TilesController peut aider à rendre vos actions moins encombrées. L'objectif global, quelle que soit la technique utilisée, est de paramétrer NM_Landing.jsp, puis de changer quel jsp l'attribut "body" de la définition utilise. Par exemple, NM_landing.jsp pourrait être rien de plus que d'appeler quelque chose comme

<c:import url="${nameOfJSPToImport}" /> 
Questions connexes