更新时间:2023-01-26 22:24:19
我不认为您真的想在此标记文件。对于你想要完成的事情来说,这太过分了,而且太混乱了。你需要花时间了解范围。而不是标记文件,我会:
1)通过更改此行,将属性更改为请求范围而不是默认页面范围:/ p>
< c:forEach items =$ {attributeDTOList}var =attributevarStatus =status> b
code>< c:forEach items =$ {attributeDTOList}var =attributevarStatus =status>
< c:set var =attributevalue =$ {attribute}scope =request/>
这会使attribute成为requestScope变量,可用于其他JSP文件C:进口。 (注意:forEach不支持scope属性,所以使用c:set将其范围限定在每次迭代中。)
< jsp:include page =attributeSubFeatureRemove.jsp>
< jsp:param name =attributevalue =$ {attribute}/>
< / jsp:include> b
code>< c:import url =attributeSubFeatureRemove.jsp/>
请注意,我们没有明确地尝试将该属性作为参数传递,因为我们已经做出了它可用于requestScope中的所有c:导入的页面。
< c:set value =$ {param.attribute}var =attribute/>
< c:forEach items =$ {attribute.subFeatures}var =subAttribute> b
code>< c:forEach items =$ {requestScope.attribute.subFeatures}var =subAttribute>
这里我们不再需要c:set,因为您已经拥有可用的属性。我们只需要确保我们查看该变量的requestScope,而不是默认的pageScope或作为参数(因为我们不再将它作为参数传递)。
这项技术对您来说更容易管理。
I am trying to send DTO Object from one jsp to another jsp using jsp:include tag. But it is always treating it as String. I can't able to use DTO in my included jsp file.
Here is a 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 file ..
<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 am trying to get attribute value from param, it is always sending String Type Value. Is there any way to send Object (DTO) in attributeSubFeatureRemove jsp file ? Please help.
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:set var="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:include page="attributeSubFeatureRemove.jsp" >
<jsp:param name="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.