2010-03-01 3 views
2

У меня есть a4j:commandButton, который выглядит следующим образомКак использовать RichFaces a4j: CommandButton не используя представить

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

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

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

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

Консоль поджигатель говорит:

this._form is null 

, которые я не понимаю.

Любая помощь хорошо оценена.

ответ

7

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

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

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

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

2

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

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

+0

Чтобы быть честным, я думал о двух вещах сразу, и будет иметь отредактировал вопрос, попробовав его, кроме того, что пришел конец моего рабочего дня, и я вышел за дверь. +1 для вашего наблюдения .. – volvox

1

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

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

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

1

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

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

<h:form> 
    <a4j:jsFunction name="fireAjax" action=".."/> 
</h:form> 
Смежные вопросы