Откат Ajax, когда Javascript отключен - PullRequest
1 голос
/ 04 января 2012

Проблема:
i) В приложении JSF2 я хочу создать страницу с элементом управления вкладками, где, когда пользователь нажимает на вкладку, содержимое панели ниже загружается из файла xhtml на сервере посредством вызова ajax. /> II) Я хочу, чтобы это поддерживало постепенное ухудшение (когда Javascript отключен), чтобы при нажатии на вкладку запускался HTTP-запрос и загружалась новая страница ... или наоборот, путем постепенного улучшения. />

Частичные решения: я) Я думаю, что я могу сделать это с помощью примера кода, опубликованного BalusC в Как ajax jsf 2 outputLink
: -

<h:form>
<f:ajax render=":include">
    <h:commandLink value="Home" action="#{menuManager.setPage('home')}" /><br />
    <h:commandLink value="FAQ" action="#{menuManager.setPage('faq')}" /><br />
    <h:commandLink value="Contact" action="#{menuManager.setPage('contact')}" /><br />
</f:ajax>

</h:form>
<h:panelGroup id="include">
    <ui:include src="#{menuManager.page}.xhtml" />
</h:panelGroup>

Вопрос
Как я могу расширить это, чтобы решить проблему (ii) Или есть какой-то другой совершенно другой метод? Я думаю может быть Я мог бы достичь этого с помощью noscript, но не могу понять, как!

РЕДАКТИРОВАТЬ: возможное решение - еще предстоит проверить :
Приведенный выше код должен работать, даже если ajax отключен; он должен работать только через HTTP, согласно http://www.laliluna.de/articles/posts/jsf-2-evaluation-test.html :)
Элегантный! Я попробую.

1 Ответ

2 голосов
/ 04 января 2012

Если вы используете <h:commandButton> вместо <h:commandLink>, то он будет работать нормально, когда JS отключен. Командные ссылки в любом случае требуют JS для отправки «скрытой» формы POST, ajaxified или нет. При необходимости вы можете добавить немного CSS, чтобы кнопки команд выглядели как ссылки (например, удалить рамку, фон, вставку и т. Д.).

В качестве совершенно другой альтернативы, в любом случае, сделайте их GET-запросами, используя <h:outputLink> или <h:link> со страницей в качестве параметра запроса или pathinfo, и используйте jQuery.load() вместо того, чтобы незаметно получить страницу включения, извлечь соответствующую часть и включить в дерево HTML DOM.

...