我正在尝试使用jsp:include标签将DTO Object从一个jsp发送到另一个jsp。但它始终将其视为字符串。我无法在包含的jsp文件中使用DTO。
这是一个代码..
<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文件..
<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>
这里我试图从param获取属性值,它总是发送String Type Value。有没有办法在attributeSubFeatureRemove jsp文件中发送Object(DTO)?请帮忙。
答案 0 :(得分:17)
我不认为你真的想要这里的标签文件。对于你想要完成的事情来说,这太过分了,而且太混乱了。你需要花时间理解&#34;范围&#34;。我会:而不是标签文件:
1)将您的属性更改为&#34;请求&#34;范围而不是默认的&#34;页面&#34;范围改变这一行:
<c:forEach items="${attributeDTOList}" var="attribute" varStatus="status">
到这个
<c:forEach items="${attributeDTOList}" var="attribute" varStatus="status">
<c:set var="attribute" value="${attribute}" scope="request"/>
这将使&#34;属性&#34; a&#34; requestScope&#34;可以在c:import的其他JSP文件中使用的变量。 (注意:forEach不支持范围属性,所以使用c:set在每次迭代中设置范围。)
2)将原来的jsp:include更改为c:import。所以改变它:
<jsp:include page="attributeSubFeatureRemove.jsp" >
<jsp:param name="attribute" value="${attribute}" />
</jsp:include>
到这个
<c:import url="attributeSubFeatureRemove.jsp"/>
请注意,我们并未明确尝试将该属性作为参数传递,因为我们已将其提供给&#34; requestScope&#34;中的所有c:导入页面。
3)修改c:导入的JSP,使用requestScope引用该属性,方法是更改:
<c:set value="${param.attribute}" var="attribute" />
<c:forEach items="${attribute.subFeatures}" var="subAttribute">
到这个
<c:forEach items="${requestScope.attribute.subFeatures}" var="subAttribute">
这里我们不再需要c:set,因为您已经拥有了该属性。我们只需要确保在requestScope中查找该变量,而不是在默认的pageScope中或作为参数(因为我们不再将其作为参数传递)。
这项技术将更容易管理。
答案 1 :(得分:1)
所以我通过使用标记文件解决了这个问题。我现在不再使用jsp:include标记,因为它总是发送字符串类型。
这是一个解决方案..
<%@ 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文件
<%@ 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>
这里我给出了Type Attribute来访问标签文件中的Object。它工作正常。
答案 2 :(得分:1)
您无法使用jsp:include param标记直接将Object传递到另一个jsp。
但是,您可以使用jsp:include param标记将该属性的NAME(作为字符串)传递到另一个jsp中。然后在包含的jsp中,您可以通过requestScope中的名称获取该属性。
在主JSP中:
autoCompleteOperationDetail.setAdapter(operationDetailArrayAdapter);
在attributeSubFeatureRemove.jsp中:
<c:forEach items="${items}" var="item" varStatus="status">
<jsp:include page="attributeSubFeatureRemove.jsp" >
<jsp:param name="objName" value="item" />
</jsp:include>
</c:forEach>