Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Можно ли через <navigation-rule> перенаправить


Автор: Maverick 4.6.2007, 14:25
Использую JSF... мне надо по кнопке уйти в другое web-приложение... Каким образом, это сделать? 

пишу так 
Код

    <navigation-rule>
        <from-view-id>/ListBank.jsp</from-view-id>
        <navigation-case>
            <from-outcome>idAddress</from-outcome>
            <to-view-id>http://localhost:8080/Address-vwa/faces/FormAddress.jsp</to-view-id>
        </navigation-case>
    </navigation-rule>
    


дает ошибку... Пробовал использовать hyperlink... если просто писать url в свойствах - переходит, но все дел в том, что включенный url отключает событие action, которое мне нужно... В хедле пишут: нужен action - используйте <navigation-rule>... но как же там адрес прописать конечный..???

Добавлено через 6 минут и 22 секунды
забыл упомянуть - JavaScript лучше не предлагать... заранее благодарен... 

Автор: Maksym 4.6.2007, 14:35
Можно обойтись без navigation-rule (все таки они предназначены для навигации внутри приложения) и в коде метода, обрабатывающего нажатие кнопки, сделать, например, response.sendRedirect("http://localhost:8080/Address-vwa/faces/FormAddress.jsp")

Автор: Maverick 4.6.2007, 14:37
Как получить этот самый response в JSF? двигаюсь как в темной комнате - наощупь...

Добавлено через 3 минуты и 43 секунды
Код

        HttpServletResponse response = (HttpServletResponse)   this.getExternalContext().getResponse();
        response.sendRedirect("http://localhost:8080/Address-vwa/faces/FormAddress.jsp");         



так прокатит??

Добавлено через 6 минут и 22 секунды
заработало... СПАСИБО... ;)

Автор: check 10.3.2008, 00:33
У меня не пркатило:
Код

IllegalStateException: Cannot forward after response has been committed


Смысл ошибки примерно ясен, а вот причина нет.  
Под "response has been committed" понимается, что он был уже отправлен браузеру jsp(jsf) страницей?
И что теперь?

Код

public class ButtonListener extends FacesBean {

    public void onClick() {

        try {
            HttpServletResponse response = (HttpServletResponse)   this.getExternalContext().getResponse();
            response.sendRedirect("http://localhost:8080/jsfks/article.jsp");
        }
        catch (IOException e) {
             e.printStackTrace();
        }

Автор: check 10.3.2008, 13:49
А,  так это обычная ошибка - заголовки посланы после вывода.
То есть код
Код

...
<h:outputText value="#{name.first}" rendered="#{not name.editable}"/>
<h:commandButton image="outleaf.bmp" action="#{ButtonListeners.onClick}"/>

это  примерно то же самое,  что 
Код

out.println("something");
response.sendRedirect("http://localhost:8080/jsfks/article.jsp");


Как это обойти?  Можно ли как-то буферизовать вывод,  неважно средствами JSP или JSF?

navigation-rule не подойдет,   поскольку урл должен формироваться динамически.

В общем-то это все касается этой темы: http://forum.vingrad.ru/forum/topic-199915.html


Автор: ivg 10.3.2008, 22:29
check, попробуйте так
Код

public class ButtonListener extends FacesBean {
    public void onClick() {
        try {
            FacesContext.getCurrentInstance().responseComplete();
            HttpServletResponse response = (HttpServletResponse)   this.getExternalContext().getResponse();
            response.sendRedirect("http://localhost:8080/jsfks/article.jsp");
        }
        catch (IOException e) {
             e.printStackTrace();
        }


Автор: check 10.3.2008, 23:48
По-привычке чуть не поставил галку "вопрос решен",  но вовремя вспомнил, что тема не моя  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)