как перенаправить на сервлет из commandButton в xhtml - PullRequest
3 голосов
/ 04 января 2012

У меня были эти проблемы в течение нескольких дней.надеюсь, это будет чище, и кто-то, кто делал это раньше, может мне помочь!

Я создаю webApp с JSF 2.0 в Eclipse, работающем на сервере Tomcat 7.0.и сделал сервлет, к которому я хочу пойти, но я не знаю, как изменить правила навигации, чтобы взять меня туда:

В моем проекте путь src / com / servlets / PdfServlet, поэтому, когда яЗапустите проект на сервере, к этому сервлету можно получить доступ через url localhost: 8080 / miloWeb / PdfServlet.сервлет фактически создает для меня файл PDF и отображает его.

в любом случае мой xhtml имеет следующее:

<h:commandButton id="reportButton"  action="reportPdf" styleClass="button" value="get Report" ></h:commandButton>

мои правила навигации лиц-конфигураций выглядят так:

<navigation-rule>
    <navigation-case>
        <from-outcome>reportPdf</from-outcome>      
        <to-view-id>/miloWeb/PdfServlet</to-view-id>
        <redirect />
    </navigation-case>
</navigation-rule>

но мне понадобится miloWeb / Faces / MiloWeb / PdfServlet, и мне нужно, чтобы он привел меня в miloWeb / PdfServlet.

Любые идеи о том, как выполнить это, или другой маршрут или делать это?

Ответы [ 2 ]

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

Прежде всего, правило навигации только для JSF. Они не могут помочь вам перейти к сервлету.

Правила навигации вface-config избыточны в JSF2.0. Они неявно обрабатываются JSF на основе значения (результата), возвращаемого методом действия. "?faces-redirect=true" может быть прикреплено к концу результата для перенаправления.

Я не знаю, каково ваше функциональное требование. Вы пытаетесь смешать JSF и сервлеты, что не очень хорошая идея.

<h:commandButton id="reportButton"  action="reportPdf"

Значение атрибута action должно быть выражением метода, которое разрешается в метод в некотором управляемом компоненте JSF. например action="#{controllerBean.axnMethod()}".

Когда вызывается axnMethod(), одним из вариантов является перенаправление оттуда к сервлету. Это что-то следующее:

FacesContext.getCurrentInstance().getExternalContext().redirect("url");

Или требуется просто вызвать сервлет, а затем в представлении просто поместить ссылку с URL, который вызывает сервлет.

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

JSF выполняется в сервлете Faces, и при стандартной навигации вы можете перемещаться только к представлениям jsf.Чтобы открыть сервлет, используйте вместо этого.Другой вариант - избегать использования сервлета и обслуживать файл pdf с помощью метода действия, как описано здесь: http://www.winstonprakash.com/articles/jsf/file_download_link.htm

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...