Как использовать RichFaces a4j: commandButton без использования submit - PullRequest
2 голосов
/ 01 марта 2010

У меня есть a4j:commandButton, который выглядит так

    <a4j:commandButton id="stopBtn" type="button" reRender="lastOp"
  action="#{MyBacking.stop}" value="Stop" />
 </a4j:commandButton>

Когда приложение развернуто и нажата кнопка, метод stop () не вызывается. Все a4j:commandButton примеры относятся к формам, но эта кнопка не в форме - это кнопка, которую пользователь собирается использовать, чтобы заставить сервер запустить некоторую внутреннюю логику. На данный момент метод

    public void stopNode() {
 logger.info("STOPPING");
 setLastOp("Stopped.");
}

Другие методы, которые не используют этот тип кнопки, обновляют поле lastOp, но я не вижу ничего на консоли с этим. Правильно ли я разыграть это как кнопку? Должен ли я поместить это в h:form тег?

Консоль Firebug говорит:

this._form is null

чего я не понимаю.

Любая помощь приветствуется.

Ответы [ 4 ]

7 голосов
/ 01 марта 2010

UICommand компоненты должны быть размещены внутри UIForm компонентов. Итак, ваше предположение

Должен ли я поместить это в h:form тег?

совершенно правильно :) Это потому, что они запускают запрос POST, и единственный (нормальный) способ для этого - использовать элемент HTML <form>, атрибут method которого установлен в "post". Firebug также говорит, что ожидается родительский элемент формы, но он разрешен до null, и поэтому никакие действия не могут быть выполнены.

Только "простые ванильные" ссылки, такие как h:outputLink и consorts, не нуждаются в форме, потому что они просто запускают запрос GET.

2 голосов
/ 01 марта 2010

Да, заверните это в форму. Я уверен, что BalusC опубликует подробное объяснение, пока я печатаю свой ответ. (да, вот оно)

Я должен спросить, почему вы сначала не попробовали форму, прежде чем писать здесь.

1 голос
/ 09 марта 2011

Если по какой-то причине вы не хотите размещать кнопку внутри формы, вы можете сделать что-то вроде этого:

<a4j:commandButton onclick="fireAjax()"/>

<h:form>
   <a4j:jsFunction name="fireAjax" action=".."/>
</h:form>
1 голос
/ 20 августа 2010

Посмотрите на ваш код:

<a4j:commandButton id="stopBtn" type="button" reRender="lastOp" action="#{MyBacking.stop}" value="Stop" /> 

Вы закончили <a4j:commandButton с />, зачем нужна сирота </a4j:commandButton>?

...