How To Pass Object Using Jsp:include Param Tag Into Another Jsp
Solution 1:
I don't think you really want tag files here. That's way overkill and too confusing for what you want to accomplish. You need to spend time understanding "scope". Instead of tag files, I would:
1) Change your attribute to be in the "request" scope instead of the default "page" scope by changing this line:
<c:forEach items="${attributeDTOList}"var="attribute" varStatus="status">
to this
<c:forEach items="${attributeDTOList}"var="attribute" varStatus="status">
<c:setvar="attribute" value="${attribute}" scope="request"/>
That will make "attribute" a "requestScope" variable that can be used in other JSP files that are c:imported. (Note: forEach doesn't support scope attribute so use c:set to scope it inside each iteration.)
2) Change your original jsp:include to c:import. So change it from:
<jsp:includepage="attributeSubFeatureRemove.jsp" ><jsp:paramname="attribute"value="${attribute}" /></jsp:include>
to this
<c:import url="attributeSubFeatureRemove.jsp"/>
Note that we don't explicitly try to pass the attribute as a parameter, because we have already made it available to all c:imported pages in the "requestScope".
3) Modify your c:imported JSP to reference the attribute using the requestScope by changing this:
<c:set value="${param.attribute}"var="attribute" />
<c:forEach items="${attribute.subFeatures}"var="subAttribute">
to this
<c:forEach items="${requestScope.attribute.subFeatures}"var="subAttribute">
Here we no longer need the c:set because you already have the attribute available. We just need to make sure we look in the requestScope for that variable, instead of in the default pageScope or as a parameter (because we are no longer passing it as a parameter).
This technique will be a lot easier for you to manage.
Solution 2:
You can not directly pass an Object using jsp:include param tag into another jsp.
However, you can pass that attribute's NAME (as a string) using jsp:include param tag into another jsp, Then in the included jsp, you can get that attribute itself by its name from requestScope.
in your main JSP:
<c:forEachitems="${items}"var="item"varStatus="status"><jsp:includepage="attributeSubFeatureRemove.jsp" ><jsp:paramname="objName"value="item" /></jsp:include></c:forEach>
in attributeSubFeatureRemove.jsp:
object's name = ${param.objName}
object itself = ${requestScope[param.objName]}
Justfor an easier access:
<c:setvar="obj" value="${requestScope[param.objName]}" scope="page"></c:set>
obj=${obj}
Solution 3:
So I have solved the issue by using tag file. I am no longer using jsp:include tag now because it will always send String Type.
Here is a solution ..
<%@ 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 file
<%@ 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:iftest="${ 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 am giving Type Attribute to access Object in tag file. And it works fine.
Post a Comment for "How To Pass Object Using Jsp:include Param Tag Into Another Jsp"