2013-07-30 5 views
2

Я знаю, что это было задано несколько раз, но мой вопрос немного отличается.Как передать параметры URL JSF/xHTML?

У меня есть страница JSF, которая запрашивает базу данных и генерирует результаты, прежде чем перейти к JSF, я использовал это в JSP, и он работал нормально.

Когда я использовал JSP ниже формат ссылку я имел обыкновение использовать

http://localhost:8080/blmdatabase/index.jsp?SearchString=Name&Category=Contact&Submit=Submit 

Мой index.jsp используется для получения значений с помощью param.SearchString & param.Category и «Отправить» используется для активации кнопку «отправить» для поиска.

Как сделать то же самое для xHTML/JSF?

Вот что я пытался ...

http://localhost:8080/blmdatabase/index.xhtml?search=#{some search string} 

В моей index.xhtml

<td> 
    <f:metadata> 
     <f:viewParam name="search" value="#{databaseSearch.searchstring}" /> 
    </f:metadata> 
    <p:inputText id="searchstring" size="20" maxlength="20" value="#{databaseSearch.searchstring}"/> <p:commandButton id="submit" icon="ui-icon-search" title="Search Database" update="panel" actionListener="#{databaseSearch.customerList}" /> 
    </td> 

в моем databaseSearch.java

@ManagedBean(name = "databaseSearch") 
@SessionScoped 

public class databaseSearch implements Serializable { 

    public String searchstring; 
    //getter and setter for searchstring 
} 

Кроме того, я бы это нужно " Отправить форму. Я новичок в этом, поэтому, пожалуйста, извините меня, если это уже обсуждалось до ...

Также, если я определен index.html, мои компоненты jsf не будут загружаться, просто пустая страница. как если бы я пойти

http://localhost:8080/blmdatabase/ 

мои primefaces компоненты нагрузки хорошо, но если я делать

http://localhost:8080/blmdatabase/index.xhtml 

это не делает, так что теперь я задаюсь вопросом, как передать параметры :(

Web .xml

<servlet> 
    <servlet-name>Faces Servlet</servlet-name> 
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>/faces/*</url-pattern> 
</servlet-mapping> 
<session-config> 
    <session-timeout> 
     30 
    </session-timeout> 
</session-config> 
<welcome-file-list> 
    <welcome-file>faces/index.xhtml</welcome-file> 
</welcome-file-list> 
+1

* if i do 'http: // localhost: 8080/blmdatabase/index.xhtml' it does not * Похож на проблему в вашем URL-адресе URL-адреса сервлетов Faces. Отправьте эту часть конфигурации из файла web.xml, чтобы получить дополнительную помощь. –

+0

Возможный дубликат [Что можно использовать и ?] (Http://stackoverflow.com/questions/6377798/what-can-fmetadata-and-fviewparam-be-used-for) – BalusC

+0

@LuiggiMendoza сделаю. .. –

ответ

4

Вы можете «отправить» вашу форму, добавив <f:event type="preRenderView"> в тег <f:metadata>.

<f:metadata> 
    <f:viewParam name="search" value="#{databaseSearch.searchstring}" /> 
    <f:event type="preRenderView" listener="#{databaseSearch.doSearch}" /> 
</f:metadata> 

Таким образом, вы могли бы реализовать, как ваш компонент будет искать для этой строки запроса

public void doSearch(ComponentSystemEvent event) { 
    if(!searchString.isEmpty()) { 
     // Do your search here 
    } 
} 
+0

Я получаю сообщение об ошибке «java.lang.NullPointerException» :( –

+0

@TelsonAlva отредактируйте ваш вопрос и добавьте связанный стек. –

+0

Я получил его .... у меня было два параметра, и я был только прохождение одного :) .. новобранец ошибка ... это работало как шарм! –

0

вы могли бы использовать метод в классе ДАТ aBaseSearch:

if(searchString != null){ 
//execute a query in database 
// return result to a variable(resultSet or list) 
} 

и использовать геттер и сеттер, чтобы получить в Resultset или список и сделать результат в DataTable.

1

Your Faces Servlet карты к чему-либо, что это держать в лиц виртуальной папки:

<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>/faces/*</url-pattern> 
</servlet-mapping> 

Таким образом, http://localhost:8080/blmdatabase/index.xhtml URL-адрес не обрабатывается через Servlets Faces.Вы должны использовать http://localhost:8080/blmdatabase/faces/index.xhtml, обратите внимание на использование faces/ перед вашим файлом index.xhtml, также обратите внимание, что ваш <welcome-file> также указывает на faces/index.xhtml.

Недостатком этого URL шаблона является то, что лица Servlet также обрабатывать не-Facelets ресурсы, такие как файлы JavaScript (.js), Style файлы ( .css), изображения (* .png, * .jpg) и другие , Лучше отображение Faces Servlet будет:

<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.xhtml</url-pattern> 
</servlet-mapping> 

Таким образом, лица Servlet будут обрабатывать Xhtml страницы только и вам не нужен лица виртуальной папки больше. С этим изменением теперь вы можете без проблем получить доступ к http://localhost:8080/blmdatabase/index.xhtml.

+0

Спасибо! Это было очень полезно! –

+0

Небольшая проблема ... когда я включаю index.xhtml, он отлично работает сейчас ... но я также хотел бы открыть ту же страницу, просто введя http: // localhost: 8080/blmdatabase это возможно? –

+0

@TelsonAlva Измените свой '' соответственно, чтобы не использовать 'faces', а непосредственно' index.xhtml'. –

Смежные вопросы