如何将url参数传递给JSF / xHTML?

时间:2013-07-30 14:06:07

标签: jsf url parameters facelets params

我知道这已被多次询问,但我的问题略显不同。

我有一个查询数据库并抛出结果的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>

3 个答案:

答案 0 :(得分: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>

这样,您就可以实现bean搜索此特定查询字符串的方式

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

答案 1 :(得分:1)

您的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,请注意在faces/文件之前使用index.xhtml,同时请注意您的<welcome-file>也指向faces/index.xhtml

此URL模式的缺点是Faces Servlet还会处理非facelets资源,如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

答案 2 :(得分:0)

您可以在类dataBaseSearch中使用方法:

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

并使用getter和setter获取resultSet或List 并将结果呈现在数据表中。