我正在尝试使用 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
的 dsp:a
标签时遇到了问题。生成的 HTML 将 ${id}
硬编码为 display_product.jsp?itemId=${id}
。我正在获取产品列表,但 URL 是我遇到问题的地方。如何将 element.id
中的值传递到 href
的 dsp:a
属性中?我也尝试了以下方法,但没有成功。
1.
<dsp:a href="display_product.jsp?itemId=<%=out.print(element.id) %>">
2.
<dsp:a href="display_product.jsp?itemId=<%=out.print(id) %>">
3.
<dsp:getvalueof var="id" id="id" >
<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:getvalueof>
最佳答案
要将参数传递到另一个页面,您只需按照下面的代码片段使用 <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 标签您可以为包含的 JSP 片段传递参数,这些片段使用
<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>
关于java - 如何使用 <dsp :a> in Oracle Commerce(ATG) 生成动态 URL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25510040/