Как передать объект области страницы в пользовательский тег JSP с помощью Struts 2? - PullRequest
1 голос
/ 07 декабря 2011

Я использую Struts 2, и мне нужно передать переменную области страницы в пользовательский тег JSP.

Если я использую синтаксис OGNL %{#option}, я получаю следующую ошибку:

org.apache.jasper.JasperException: PWC6338: Cannot convert "%{#option}" for the attribute option of the bean com.leaseplanis.iq.model.bo.options.OptionDetail

Где как будто я использую синтаксис EL ${option} I, объект null.

Мой пользовательский тег находится в моем веб-приложении * / WEB-INF / tags / option_price_textfield.tag *:

<%@ taglib uri="/struts-tags" prefix="s"%>
<%@ tag body-content="empty"%>
<%@ attribute name="option" type="com.leaseplanis.iq.model.bo.options.OptionDetail" required="true" rtexprvalue="true"%>

<s:textfield
    id="%{optionId(#option, 'price')}"
    name="%{optionField(#option, 'price')}"
    value="%{optionGrossPrice(#option).getString()}"
    cssClass="input price"
    size="8"
    maxlength="11"
    onchange="%{optionPriceUpdate(#option)}" />

Пользовательский тег используется на следующей странице JSP:

<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<%@ taglib prefix="iq" tagdir="/WEB-INF/tags"%>
.
.
<s:iterator var="option" value="variousOptionList">
    .
    .
    <s:if test="viewConfigService.displayPriceColumn()">
        <td class="price">
            <s:if test="isPriceEditable(#option)">
                <iq:option_price_textfield option="%{#option}"/>
            </s:if>
            <s:else>
                <s:property value="optionGrossPrice(#option).getString()"/>
            </s:else>
            <s:property default="&nbsp;" escape="false" value="#option.optionCur"/>
        </td>
    </s:if>
    .
    .
</s:iterator>

1 Ответ

1 голос
/ 07 декабря 2011

OGNL разрешает доступ к таким атрибутам, как option через #attr.Измените option доступы, чтобы использовать это, и вы должны быть все настроены:

<s:textfield
    id="%{optionId(#attr.option, 'price')}"
    name="%{optionField(#attr.option, 'price')}"
    value="%{optionGrossPrice(#attr.option).getString()}"
    cssClass="input price"
    size="8"
    maxlength="11"
    onchange="%{optionPriceUpdate(#attr.option)}" />
...