Проблема Struts - s: скрытый - PullRequest
0 голосов
/ 28 февраля 2011

У меня есть следующий код в моем JSP. Я использую форму Struts, где я передаю список, который я перебираю, и каждый элемент в списке имеет свою отдельную форму. Все поля в списке являются строками, кроме id, который является целым числом. Я пытаюсь отобразить int в теге s: hidden, но Eclipse говорит мне «Неверный атрибут (значение)». В документации Struts говорится, что значение принимает строку, но я обертываю bulletins.id внутри $ {...}, который должен преобразовать его в строку. Я сделал несколько поисков в Google, чтобы попытаться решить эту проблему, но ничего не нашел. Кто-нибудь видел это раньше?

    <%@ page import="java.io.*"%>
    <%@ page import="java.util.List"%>
    <%@ page language="java" import="model.Bulletin"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    <%@ taglib prefix="s" uri="/struts-tags"%>

    <!-- Some more code here that's not relevant to this problem -->

    <c:forEach var="bulletins" items="${bulletins}">
        <c:if test="${bulletins.approved == false}">
            <s:form action="ApproveBulletin" method="post">
                <table>
                    <tr>
                        <td colspan="2"><b>From:</b> <c:out value="${bulletins.name}" /></td>
                    </tr>
                    <tr>
                        <td colspan="2"><b>Subject:</b> <c:out value="${bulletins.subject}" /></td>
                    </tr>
                    <tr>
                        <td colspan="2"><b>Date:</b> <c:out value="${bulletins.date}" /> <br>
                        </td>
                    </tr>
                    <tr>
                        <td colspan="2"><c:out value="${bulletins.note}" />
<!-- Error here -->         <s:hidden name="id" value="${bulletins.id}" /></td>
                    </tr>
                    <tr>
                        <td><s:submit type="button" value="approve" label="Approve"
                            action="ApproveBuletin" /></td>
                        <td><s:submit type="button" value="deny" label="Deny"
                            action="DenyBulletin" /></td>
                    </tr>
                </table>
                <br />
            </s:form>
        </c:if>
    </c:forEach>

    <!-- Some more code here that's not relevant to this problem -->

Ответы [ 2 ]

1 голос
/ 28 февраля 2011

Теги Struts2 предпочитают OGNL, поэтому замените $ {} на% {} или, что еще лучше, просто напишите

<s:hidden name="id" value="bulletins.id" />

Это личное предпочтение, но я бы написал эту страницу только с тегами S2 как таковыми:

<s:iterator value="bulletins">
    <s:if test="approved == false">
        <s:form action="ApproveBulletin" method="post">
            <table>
                <tr>
                    <td colspan="2">
                        <b>From:</b> 
                        <s:property value="name" />
                    </td>
                </tr>
                <tr>
                    <td colspan="2"><b>Subject:</b> <s:property value="subject" /></td>
                </tr>
                <tr>
                    <td colspan="2"><b>Date:</b> <s:property value="date" /></td>
                </tr>
                <tr>
                    <td colspan="2">
                            <s:property value="note"/>
                            <s:hidden name="id" value="id" />
                    </td>
                </tr>
                <tr>
                    <td><s:submit type="button" value="approve" label="Approve" action="ApproveBuletin" /></td>
                    <td><s:submit type="button" value="deny" label="Deny" action="DenyBulletin" /></td>
                </tr>
            </table>
            <br/>
        </s:form>
    </s:if>
</s:iterator>

Разница очень небольшая. Обратите внимание, что стек итераторов помещает текущий итерируемый объект в стек, поэтому вам не нужны точечные обозначения внутри элемента итератора (хорошо для более глубоко вложенных объектов ...).

0 голосов
/ 28 февраля 2011

Я не имею ни малейшего представления о части Struts2, но следующее определенно неверно:

<c:forEach var="bulletins" items="${bulletins}">

Вы перезаписываете список текущим итерированным элементом. В обычных терминах Java вы в основном делаете:

for (Bulletin bulletins : bulletins) {}

Это не имеет смысла и также не будет компилироваться ( дублировать локальную переменную или что-то в этом роде).

Дайте ему другое и уникальное имя. bulletin будет иметь смысл. Есть средства только одного бюллетеня внутри цикла, верно?

<c:forEach var="bulletin" items="${bulletins}">

и затем замените любой ${bulletins.property} внутри цикла на ${bulletin.property}.

...