Фрагмент кода Мэтта Хэнди является правильным решением, но объяснение причины является неправильным.
Вы пропустили атрибут execute
<f:ajax>
в командной кнопке.Затем по умолчанию будет установлено значение @this
, что означает, что на серверную сторону отправляется только пара имя = значение самой кнопки (и, таким образом, только будет вызвано соответствующее действие; входные значения выиграны 'быть обновленным).Поскольку вместо этого вы хотите отправить всю форму, вам нужно явно установить execute
в @form
.
<h:commandButton value="Send" id="sendButton" action="#{chat.send}">
<f:ajax execute="@form" render=":chatLogId :chatId" />
</h:commandButton>
Это работает во время изменения поля ввода, потому что вы вместо этого поместили execute="@form"
в поле ввода.<f:ajax>
внутри полей ввода будет по умолчанию выполняться при изменении значения.Но в данном конкретном случае вам это вообще не нужно.Так что избавься от этого:
<h:inputText id="chatInput" value="#{chat.msgTo}" autocomplete="off" />