Невозможно получить доступ к значению компонента в EL - PullRequest
0 голосов
/ 31 января 2012
public class ReportAdHoc {

    private String name;
    private String reportKind;
    private List<ReportAdHocInstance> instances;


    public void addInstance(ReportAdHocInstance instance){
        if (instances == null){
            instances = new ArrayList<ReportAdHocInstance>();
        }
        instances.add(instance);
    }


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getReportKind() {
        return reportKind;
    }
    public void setReportKind(String reportKind) {
        this.reportKind = reportKind;
    }

    public List<ReportAdHocInstance> getInstances() {
        return instances;
    }
    public void setInstances(List<ReportAdHocInstance> instances) {
        this.instances = instances;
    }


}

public class ReportAdHocInstance {

    private int id;
    private String reportName;  
    private Date runtime;
    private String runBy;
    private String format;
    private List<ReportAdHocParameter> parameters;

    public void addParameters(ReportAdHocParameter parameter){
        if (parameters == null){
            parameters = new ArrayList<ReportAdHocParameter>();
        }
        parameters.add(parameter);
    }

    public String getReportName() {
        return reportName;
    }
    public void setReportName(String reportName) {
        this.reportName = reportName;
    }
    public Date getRuntime() {
        return runtime;
    }
    public void setRuntime(Date runtime) {
        this.runtime = runtime;
    }
    public String getFormat() {
        return format;
    }
    public void setFormat(String format) {
        this.format = format;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getRunBy() {
        return runBy;
    }
    public void setRunBy(String runBy) {
        this.runBy = runBy;
    }

    public List<ReportAdHocParameter> getParameter() {
        return parameters;
    }

    public void setParameter(List<ReportAdHocParameter> parameters) {
        this.parameters = parameters;
    }
}

public class ReportAdHocParameter {

    private int id;
    private String parameterName;   
    private String parameterValue;

    public String getParameterName() {
        return parameterName;
    }
    public void setParameterName(String parameterName) {
        this.parameterName = parameterName;
    }

    public String getParameterValue() {
        return parameterValue;
    }
    public void setParameterValue(String parameterValue) {
        this.parameterValue = parameterValue;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }

}

JSP код

<c:forEach items="${reportAdHoc.instances}" var="inst">
        <c:forEach items="${inst.parameter}" var="param">
            <td>${param.parameterName}</td>         
        </c:forEach>
</c:forEach>

Я не могу получить значение ${param.parameterName}. Отображается пустым.

Но если я печатаю <td>Test</td>, то test печатается 11 раз, поскольку по моему циклу он должен содержать 11 значений.

Почему я не могу получить parameterName?

1 Ответ

1 голос
/ 31 января 2012

${param} - это зарезервированное имя переменной EL, относящееся к карте параметров запроса. Например, ${param.foo} дает вам request.getParameter("foo"). Неявные переменные EL имеют приоритет над пользовательскими переменными.

Дайте ему другое имя. Например. var="parameter" и используйте ${parameter}.

<c:forEach items="${reportAdHoc.instances}" var="inst">
    <c:forEach items="${inst.parameter}" var="parameter">
        <td>${parameter.parameterName}</td>
    </c:forEach>
</c:forEach>

Смотри также:


Далее я бы предложил переименовать одно и другое, чтобы в итоге вы получили больше самодокументируемого кода, например:

<c:forEach items="${reportAdHoc.instances}" var="instance">
    <c:forEach items="${instance.parameters}" var="parameter">
        <td>${parameter.name}</td>
    </c:forEach>
</c:forEach>
...