Ошибка чтения параметра 'context' для ссылки на страницу - PullRequest
0 голосов
/ 16 июня 2011

привет, у меня возникла проблема с ошибкой:

Я пытаюсь передать значение integer с одной страницы через страницу аннотгера pagelink, используя контекст. Код выглядит примерно так:

public class Contact
{

    @Persist
    @Property
    private Integer nNumb;

    @Property
    private Integer singleRow;
    @Property
    private Integer singleColumn;

    @Persist
    @Property
    private Integer columns [];
    @Persist
    @Property
    private Integer rows [];

    @OnEvent
    Object onSumbit(){
        rows = new Integer[nNumb];
        for (int i = 0; i < nNumb; i++) {
            rows[i] = i++;
        }
        columns = new Integer[nNumb];
        for (int i = 0; i < nNumb; i++) {
            columns[i] = i++;
        }
        return null;
    }
    public Integer getMultiplyValue(){
        return singleRow * singleColumn;
    }
}

Страница Contact.tml:

<body>
        <h1>Multiply Table Page 2</h1>
        <p> Submit integer number N (1&lt;=N&lt;=20): </p>

    <t:form t:id="userInput">
        <p>
             <t:label for="nNumb"/>
             <t:textfield t:id="nNumb" t:label="N:  " t:value="nNumb" t:validate="required,min=1,max=20" />
             </p>
             <p>
              <t:submit t:id="calculate" value="create multy table"/>
              </p>
    </t:form>
    <h1>Result:</h1>

    <table border="1">
        <tr>
            <td bgcolor="#aaaaaa">*</td>
            <td bgcolor="#aaaaaa" t:type="loop" t:source="columns" t:value="singleColumn">
                ${singleColumn}
            </td>
        </tr>
        <tr t:type="loop" t:source="rows" t:value="singleRow">
                <td bgcolor="#aaaaaa">${singleRow}</td>
                <td t:type="loop" t:source="columns" t:value="singleColumn">
                <a href="#" t:type="PageLink" t:page="product" t:context="${multiplyValue}">*</a>
                </td>
        </tr>
    </table>
    </body>

pagelink генерирует исключение в строке 34:

Render queue error in BeginRender[Contact:pagelink]: Failure reading parameter 'context' of component Contact:pagelink: org.apache.tapestry5.ioc.internal.util.TapestryException

    32  <td bgcolor="#aaaaaa">${singleRow}</td>
33  <td t:type="loop" t:source="columns" t:value="singleColumn">
34  <a href="#" t:type="PageLink" t:page="product" t:context="${multiplyValue}">*</a>
35  </td>
36  </tr>

Что не так, правильно ли я вызываю метод multiplyValue?

1 Ответ

1 голос
/ 16 июня 2011

Я полагаю, что контекст почти всегда ожидает, что «значение» будет именем свойства, а не выражением.Итак, вы хотите:

t:context="multiplyValue"

вместо

t:context="${multiplyValue}"

Я бы подумал, что оно выполнит выражение, а затем преобразует его в строку (что обычно происходит в параметрах контекста ?,но опять же, есть ошибка, так что, возможно, нет.

Обновление: (от автора вопроса в комментариях) привет! Я выяснил, в чем проблема ....проблема была в методе onSubmit (), когда я поместил строки [i] = i ++ и столбцы [i] = i ++, это было неправильно .... я должен сделать: row [i] = i + 1; columns [i] =я + 1

Полагаю, мне следовало прочитать код ближе:)

...