2015-03-31 10 views
9

Ich versuche, DTO-Objekt von einem JSP zu einem anderen JSP senden mit JSP: Include-Tag. Aber es behandelt es immer als String. Ich kann DTO nicht in meiner mitgelieferten JSP-Datei verwenden. HierWie übergeben Objekt mit JSP: include param-Tag in ein anderes JSP

ist ein Code ..

<c:forEach items="${attributeDTOList}" var="attribute" varStatus="status"> 
     <jsp:include page="attributeSubFeatureRemove.jsp" > 
      <jsp:param name="attribute" value="${attribute}" /> 
     </jsp:include> 
</c:forEach> 

attributeSubFeatureRemove.jsp Datei ..

<c:set value="${param.attribute}" var="attribute" /> 
<c:forEach items="${attribute.subFeatures}" var="subAttribute"> 
            <c:forEach items="${subAttribute.attributeValues}" var="subValue"> 
             <c:if test="${ subValue.preSelectionRequired}"> 
             <c:set var="replaceParams" value=":${subAttribute.name}:${subValue.name}" /> 
             <c:set var="removeURL" value="${fn:replace(removeURL, replaceParams, '')}" /> 
             </c:if> 
            </c:forEach> 
            <jsp:include page="attributeSubFeatureRemove.jsp"> 
             <jsp:param name="subAttribute" value="${subAttribute}" /> 
            </jsp:include> 
</c:forEach> 

Here I-Attributwert von param zu bekommen versuchen, es wird immer String Typ Wert sendet. Gibt es eine Möglichkeit, Objekt (DTO) in jSP-Datei attributeSubFeatureRemove zu senden? Bitte helfen Sie.

+0

@fiffy request.setAttribute Variable will. Wie definiere ich Variable? Es muss wie diese $ gesetzt werden {} Unterattribut –

+0

No, das ist nicht funktioniert :( –

+0

http://stackoverflow.com/a/13510064/2885897 – fiffy

Antwort

9

Ich glaube nicht, dass Sie wirklich Tag-Dateien hier wollen. Das ist viel Overkill und zu verwirrend für das, was du erreichen willst. Sie müssen Zeit verbringen, um "Umfang" zu verstehen. Anstelle von Tag-Dateien, würde ich:

1) Ändern Sie Ihre Attribut in der „Anfrage“ scope werden anstelle der Standard „Seite“ scope durch diese Zeile zu ändern:

<c:forEach items="${attributeDTOList}" var="attribute" varStatus="status"> 

zu diesem

<c:forEach items="${attributeDTOList}" var="attribute" varStatus="status"> 
    <c:set var="attribute" value="${attribute}" scope="request"/> 

Das wird "Attribut" eine Variable "requestScope" machen, die in anderen JSP-Dateien verwendet werden kann, die c: importiert sind. (Hinweis: forEach unterstützt kein Bereichsattribut. Verwenden Sie daher c: set, um es innerhalb jeder Iteration zu skalieren.)

2) Ändern Sie Ihr ursprüngliches JSP: Include in c: import. So ändern Sie es aus:

<jsp:include page="attributeSubFeatureRemove.jsp" > 
    <jsp:param name="attribute" value="${attribute}" /> 
</jsp:include> 

dieser

<c:import url="attributeSubFeatureRemove.jsp"/> 

Beachten Sie, dass wir nicht versuchen, das Attribut explizit als Parameter zu übergeben, weil wir bereits es für alle c gemacht haben: importierte Seiten im "requestScope".

3) Ändern Sie bitte Ihre c: importierte JSP dies das Attribut mit dem request durch Änderung verweisen:

<c:set value="${param.attribute}" var="attribute" /> 
<c:forEach items="${attribute.subFeatures}" var="subAttribute"> 

dieser

<c:forEach items="${requestScope.attribute.subFeatures}" var="subAttribute"> 

Hier brauchen wir nicht mehr die c: set, weil Sie habe das Attribut bereits verfügbar. Wir müssen nur sicherstellen, dass wir im requestScope nach dieser Variable suchen und nicht im Standard-pageScope oder als Parameter (weil wir sie nicht mehr als Parameter übergeben).

Diese Technik wird für Sie viel einfacher zu verwalten sein.

+2

Scope-Attribut für Tag nicht definiert ist, statt -Tag faizi

+1

Besser, Sie aktualisieren Ihre Antwort wie oben in Kommentar vorgeschlagen. Gr8 Job. !! –

+1

Sie schöne Person, danke lol –

1

Also habe ich das Problem gelöst, indem Sie Tag-Datei verwenden. Ich benutze jetzt nicht mehr jsp: include tag, da es immer String Type sendet. Hier

ist eine Lösung ..

<%@ taglib prefix="cms2" tagdir="/WEB-INF/tags/spine/surgery"%> 
<c:forEach items="${attributeDTOList}" var="attribute" varStatus="status"> 
    <cms2:attributeSubFeatureRemove attribute="${attribute}" /> 
</c:forEach> 

attributeSubFeatureRemove.tag Datei

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%> 
<%@ attribute name="attribute" required="true" type="com.medtronic.b2b.core.dto.HCCB2BClassificationAttributeDTO" %> 
<%@ taglib prefix="surgery" tagdir="/WEB-INF/tags/spine/surgery"%>    

    <c:forEach items="${attribute.subFeatures}" var="subAttribute"> 
     <c:forEach items="${subAttribute.attributeValues}" var="subValue"> 
      <c:if test="${ subValue.preSelectionRequired}"> 
      <c:set var="replaceParams" value=":${subAttribute.name}:${subValue.name}" /> 
      <c:set var="removeURL" value="${fn:replace(removeURL, replaceParams, '')}" /> 
      </c:if> 
     </c:forEach> 
     <surgery:attributeSubFeatureRemove attribute="${subAttribute}" /> 
    </c:forEach> 

Here I Typ Attribut gebe Objekt in Tag-Datei zuzugreifen. Und es funktioniert gut.

0

Sie können ein Objekt nicht direkt übergeben, indem Sie das Tag jsp: include param in ein anderes jsp einfügen.

Sie können jedoch den NAMEN des Attributs (als Zeichenfolge) übergeben, indem Sie den Parameter jsp: include param in ein anderes JSP verwenden. Dann können Sie das enthaltene JSP selbst anhand des Namens von requestScope abrufen.

in der Haupt JSP:

<c:forEach items="${items}" var="item" varStatus="status"> 
    <jsp:include page="attributeSubFeatureRemove.jsp" > 
     <jsp:param name="objName" value="item" /> 
    </jsp:include> 
</c:forEach> 

in attributeSubFeatureRemove.jsp:

object's name = ${param.objName} 
object itself = ${requestScope[param.objName]} 

Just for an easier access: 
<c:set var="obj" value="${requestScope[param.objName]}" scope="page"></c:set> 
obj=${obj}