簡體   English   中英

如何將url參數傳遞給JSF / xHTML?

[英]How to pass url parameters to JSF/xHTML?

我知道這個問題已經被問過多次了,但是我的問題有點不同。

我有一個查詢數據庫並拋出結果的JSF頁面,在我移至JSF之前,我曾經在JSP中做到這一點,並且運行良好。

當我在使用JSP時,下面是我以前使用的鏈接格式

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

我的index.jsp用於使用param.SearchString和param.Category捕獲值,而'Submit'用於激活搜索的'submit'按鈕。

對於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>

您可以在<f:metadata>標簽內添加<f:event type="preRenderView">來“提交”表單。

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

這樣,您可以實現Bean如何搜索此特定查詢字符串的方式

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

您的Faces Servlet映射到faces虛擬文件夾中保存的任何內容:

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

因此,不會通過Faces Servlet解析http://localhost:8080/blmdatabase/index.xhtml URL。 您必須使用http://localhost:8080/blmdatabase/faces/index.xhtml ,請注意在index.xhtml文件之前使用faces/ ,還請注意您的<welcome-file>也指向faces/index.xhtml

這種URL模式的缺點是Faces Servlet還將處理非facelet資源,例如JavaScript文件( .js),樣式文件( .css),圖像(* .png,*。jpg)等。 更好的Faces Servlet映射將是:

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

這樣,Faces Servlet將處理xhtml頁面,並且您不再需要Faces虛擬文件夾。 通過此更改,現在您可以http://localhost:8080/blmdatabase/index.xhtml訪問http://localhost:8080/blmdatabase/index.xhtml

您可以在類dataBaseSearch中使用一種方法:

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

並使用getter和setter獲取resultSet或List並將結果呈現在數據表中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM