Разница между H: button и h: commandButton
в JSF 2, в чем разница между h:button и h:commandButton ?
5 ответов:
<h:button>The
<h:button>генерирует HTML<input type="button">. Сгенерированный элемент использует JavaScript для перехода на страницу, заданную атрибутомoutcome, используя запрос HTTP GET.например.
<h:button value="GET button" outcome="otherpage" />будет генерировать
<input type="button" onclick="window.location.href='/contextpath/otherpage.xhtml'; return false;" value="GET button" />несмотря на то, что это заканчивается (заметным) изменением URL в адресной строке браузера, это не является SEO-дружественным. Поисковые роботы не будут следовать URL в
onclick. Вам лучше использовать<h:outputLink>или<h:link>если SEO важно на данном URL. Вы можете при необходимости бросить в некоторых CSS на сгенерированный HTML<a>элемент, чтобы сделать его похожим на кнопку.обратите внимание, что в то время как вы можете поместить выражение EL, ссылающееся на метод в ниже
<h:button value="GET button" outcome="#{bean.getOutcome()}" />это не вызывается при нажатии на кнопку. Вместо этого он уже вызывается, когда страница, содержащая кнопку, отображается с единственной целью: получите результат навигации, который будет встроен в сгенерированный
onclickкод. Если вы когда-либо пытались использовать синтаксис метода действия, как вoutcome="#{bean.action}", вы бы уже намекали на эту ошибку / заблуждение, столкнувшись с javax.Эль.ELException: не удалось найти свойство actionMethod в классе com.образец.В зернах.если вы собираетесь вызвать метод в результате запроса POST, используйте
<h:commandButton>вместо этого смотрите ниже. Или если вы собираетесь вызвать метод в результате GET просьба, направляйтесь к вызовите JSF управляемое бобовое действие при загрузке страницы или если у вас также есть параметры запроса GET через<f:param>,как я могу обработать параметры URL-адреса строки запроса в backing bean при загрузке страницы?
<h:commandButton>The
<h:commandButton>генерирует HTML<input type="submit">кнопка, которая отправляет по умолчанию Родительский<h:form>С помощью метода HTTP POST и вызывает действия, прикрепленные кaction,actionListenerи/или<f:ajax listener>, если таковые имеются. Элемент это.например.
<h:form id="form"> <h:commandButton id="button" value="POST button" action="otherpage" /> </h:form>будет генерировать
<form id="form" name="form" method="post" action="/contextpath/currentpage.xhtml" enctype="application/x-www-form-urlencoded"> <input type="hidden" name="form" value="form" /> <input type="submit" name="form:button" value="POST button" /> <input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="...." autocomplete="off" /> </form>обратите внимание, что он таким образом отправляется на текущую страницу (URL-адрес действия формы будет отображаться в адресной строке браузера). Это будет потом вперед на целевую страницу, без каких-либо изменений в URL в адресной строке браузера. Вы можете добавить
?faces-redirect=trueпараметр к значению результата, чтобы вызвать перенаправление после публикации (согласно Post-Redirect-Get pattern) так что целевой URL становится заметным.The
<h:commandButton>обычно используется исключительно для отправки формы сообщения, а не для выполнения межстраничной навигации. Обычно,actionуказывает на некоторые бизнес-действия, такие как сохранение данных формы в БД, которая возвращает aStringрезультат.<h:commandButton ... action="#{bean.save}" />С
public String save() { // ... return "otherpage"; }возвращение
nullилиvoidвернет вас к тому же виду. Возвращение пустого string также, но он воссоздаст любой боб с областью видимости. В наши дни, с современными JSF2 и<f:ajax>, чаще всего действия просто возвращаются к одному и тому же виду (таким образом,nullилиvoid), где результаты условно отображаются ajax.public void save() { // ... }
Читайте также:
h:buttonщелчок наh:buttonвопросы можно сделать закладкуGETзапрос.
h:commandbutton- вместо запроса get,h:commandbuttonвыдает запрос POST, который отправляет данные формы обратно на сервер.
h: commandButton должен быть заключен в форму h:и имеет два способа навигации, т. е. статический, установив атрибут действия и динамический, установив атрибут actionListener, следовательно, он более продвинут следующим образом:
<h:form> <h:commandButton action="page.xhtml" value="cmdButton"/> </h:form>этот код генерирует следующий html:
<form id="j_idt7" name="j_idt7" method="post" action="/jsf/faces/index.xhtml" enctype="application/x-www-form-urlencoded">
в то время как кнопка h:проще и просто используется для статической или основанной на правилах навигации следующим образом
<h:button outcome="page.xhtml" value="button"/>сгенерированный html-это
<title>Facelet Title</title></head><body><input type="button" onclick="window.location.href='/jsf/faces/page.xhtml'; return false;" value="button" />
это взято из книги - полная ссылка Эд Бернс и Крис Шальк
h: commandButton vs h: button
в чем разница между h:commandButton/h:commandLink и h:button/h:link ?
последние два компонента были введены в
2.0чтобы включить bookmarkable Страницы JSF, если они используются совместно с параметрами представления особенность.есть 3 основные различия между h:button/h:link и h:commandButton/h:commandLink.
первый,
h:button|h:linkзаставляет браузер выдавать HTTP-запрос GET запрос, в то время какh:commandButton|h:commandLinkделает сообщение формы. Этот означает, что любые компоненты на странице, которые имеют значения, введенные пользователя, такие как текстовые поля, чекбоксы и т. д. не автоматически быть отправлены на сервер при использованииh:button|h:link. Вызывать ценности быть представленным сh:button|h:link, дополнительное действие должно быть принято, используя функцию "просмотр параметров".второе основное различие между двумя видами компонентов заключается в том, что
h:button|h:linkимеет атрибут результата, чтобы описать, куда идти дальше в то время какh:commandButton|h:commandLinkиспользуется атрибут действия для этого цель. Это связано с тем, что первый не приводит к событию действия в системе событий, в то время как последний не делает.наконец, и самое главное для полного понимание этого особенность, то
h:button|h:linkкомпоненты заставляют навигационную систему попросите вывести результат во время рендеринга страницы, и ответ на этот вопрос закодирован в разметке страницы. В контраст, тоh:commandButton|h:commandLinkкомпоненты вызывают навигационная система должна быть запрошена для получения результата на обратной связи от страницы. Это разница во времени. Рендеринг всегда происходит перед обратной передачей.
здесь JSF javadocs о
commandButton:MethodExpression, представляющее действие приложения для вызова, когда этот компонент активируется пользователем. Выражение должно оцениваться в открытый метод, который не принимает параметров и возвращает объект (toString() которого вызывается для получения логического результата) который передается в NavigationHandler для этого приложение.
мне было бы интересно, если бы кто-нибудь мог объяснить, что это имеет отношение к любому из ответов на этой странице. Кажется довольно ясно, что
actionотносится к имени файла некоторой страницы, а не к методу.