我尝试使用ProductLookup Droplet在jsp中显示产品列表,如下所示。我还试图提供一个超链接,以导航到单个产品的产品详细信息页面。
<dsp:droplet name="/atg/commerce/catalog/ProductLookup">
<dsp:param param="element.id" name="id"/>
<dsp:oparam name="output"><br/>
<dsp:a href="display_product.jsp?itemId=${id}">
Product display Name:
<b><dsp:valueof param="element.displayName"/></b><br/>
Product description Name:
<dsp:valueof param="element.description"/>
</dsp:a>
</dsp:oparam>
</dsp:droplet>
但是,在将产品的ID传递给href
的{{1}}标记时,我遇到了问题。生成的HTML已将dsp:a
硬编码为${id}
。我收到了产品清单,但网址是我遇到问题的地方。如何将display_product.jsp?itemId=${id}
中的值传递到element.id
的{{1}}属性中?
我也尝试了以下方法,但没有成功。
1
href
2
dsp:a
3
<dsp:a href="display_product.jsp?itemId=<%=out.print(element.id) %>">
答案 0 :(得分:8)
要将参数传递到另一个页面,只需按照下面的代码片段使用<dsp:param>
标记(嵌套在ProductLookup Droplet中):
这是旧式的ATG方法:
<dsp:a href="display_product.jsp">
Product Name: <b><dsp:valueof param="element.displayName"/></b><br/>
Product description: <dsp:valueof param="element.description"/>
<%-- this will pass the itemId parameter and value--%>
<dsp:param name="itemId" param="element.id"/>
</dsp:a>
首选方法是使用jstl EL变量,使jsp更清晰,更易于阅读,并在引用值时提供更大的灵活性:
<%-- name the "element" and convert to a map --%>
<dsp:tomap var="product" param="element" recursive="false"/>
<dsp:a href="display_product.jsp">
Product Name: <b>${ product.displayName }</b><br/>
Product description: ${ product.description }
<dsp:param name="itemId" value="${ product.id }"/>
</dsp:a>
我在上面的示例中使用了recursive="false"
,因为您只是引用了产品的直接属性。如果你想引用属性的属性,那么你可以做这样的事情(下面的代码没有经过测试,但应该给你一般的想法):
<dsp:tomap var="product" param="element" recursive="true"/>
<dsp:img page="${ product.image.url }">
<强>更新强>
我仍然感到惊讶的是,很少有人了解如何做最基本的事情,例如传递参数,我已经包含了其他可以与<dsp:param>
您可以为使用<dsp:include>
<dsp:tomap var="product" param="element" recursive="false"/>
<dsp:include page="fragments/myfragment.jsp">
<dsp:param name="itemId" value="${ product.id } />
</dsp:include>
这种方法也适用于这些标签:
<dsp:iframe>
<dsp:img>
<dsp:link>
答案 1 :(得分:1)
@Bated答案非常详尽,但是想要添加一些额外的信息,说明为什么使用ATG dsp
标签实现这一目标非常重要。
ATG以两种方式维护您的会话:
通过使用<dsp>
标记,您可以确保维护用户会话,因为用户很可能已禁用Cookie,dsp
标记将恢复为使用查询字符串。
出于这个原因,使用html锚标记是不安全的,因为只有在启用了cookie的情况下才会维护用户会话。
答案 2 :(得分:0)
请尝试以下代码段。您需要使用dsp:getvalueof,如下所示。
<dsp:droplet name="/atg/commerce/catalog/ProductLookup">
<dsp:param param="element.id" name="id"/>
<dsp:oparam name="output"><br/>
<dsp:getvalueof id="id" param="element.id" idtype="java.lang.String">
<dsp:a href="display_product.jsp?itemId=<%=id%>">
Product Name: <b><dsp:valueof param="element.displayName"/></b><br/>
Product description: <dsp:valueof param="element.description"/>
</dsp:a>
</dsp:getvalueof>
</dsp:oparam>
</dsp:droplet>