3

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

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

3 回答 3

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 
    }
}
于 2013-07-31T19:40:14.130 回答
2

您的 Faces Servlet 映射到faces虚拟文件夹中的任何内容:

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

所以http://localhost:8080/blmdatabase/index.xhtmlURL 不会被 Faces Servlet 解析。你必须使用http://localhost:8080/blmdatabase/faces/index.xhtmlfaces/在你的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

于 2013-08-01T22:51:20.247 回答
0

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

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

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

于 2013-07-30T14:19:08.523 回答