Wie der Körper URL einer Kachel in Struts Action-Klasse setzen?
Frage
Ich bin mit Streben 1.1 mit Fliesen.
Ich habe Fliesen mit Definitionen wie
<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>
Ich möchte in der Lage, den Wert des Körpers Parameter in meinem Java-Action-Klasse zu setzen. Was würde ich aus der Action oder Action bekommen, dies zu tun?
public class TileForwardAction extends Action
{
public ActionForward execute(ActionMapping mapping, ActionForm arg1,
HttpServletRequest arg2, HttpServletResponse arg3) throws Exception
{
return mapping.findForward("theTile");
}
}
die Streben Konfigurationsdatei sieht aus wie
<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>
Danke
durch die akzeptierte Antwort inspirierte ich mit folgenden Lösung kam
In der Seite in der Kachel def definiert Ich habe folgende
<% String destAttr=(String)request.getAttribute("dest"); %>
<jsp:include page="<%=destAttr%>" flush="true" />
In der Action-Klasse (weil ich faul war) Ich habe folgende
request.setAttribute("dest", "landingB.jsp");
Und es hat funktioniert.
Lösung
Sie möchten vielleicht für Controller-Klassen in Kacheln Unterstützung suchen. Die Fliesen def Eintrag wie folgt aussehen würde:
<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>
dann würde der YourControllerClass implementieren die zuführen () -Methode wie:
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");
}
}
}
Das obige Beispiel könnte ohne Verwendung von TilesControllers direkt in der Aktion durchgeführt werden, aber die TilesController helfen können, Ihre Aktionen weniger unübersichtlich. Das übergeordnete Ziel, unabhängig von Technik ist die NM_Landing.jsp dann wirklich zu ändern, die jsp des „Körper“ Attribut der Definition zu parametrieren verwendet. Zum Beispiel könnte NM_landing.jsp nichts mehr sein, als etwas umfassen nennen wie
<c:import url="${nameOfJSPToImport}" />