将inputField值作为queryString传递给JSF中的另一个页面

时间:2013-11-08 23:03:01

标签: jsf primefaces prettyfaces

我试图允许用户在inputText组件中输入一个字符串,然后按Enter或单击按钮/链接将输入的字符串作为名为'queryString'的参数传递到另一个页面。

我正在使用Prime面孔和漂亮的面孔。

我尝试了几种不同的东西。使用JSF页面代码本身:

<p:panel 
    id="quickSearch" 
    header="Quick Search" 
    toggleable="true" 
    closable="false" 
    toggleSpeed="500" 
    closeSpeed="500">

    <h:form>    

        <p:inputText 
            id="queryStringInput"
            name="queryStringInput"
            value="#{dBean.queryString}" />

        <p:commandLink
            id="submitQuery"
            ajax="false"
            value="Search"
            type="submit"
            action="pretty:content">

            <f:param 
            id="queryString"
            name="queryString" 
            value="#{dBean.queryString}" />

        </p:commandLink>    

    </h:form>       

</p:panel> 

另一种方式:

<p:panel 
    id="quickSearch" 
    header="Quick Search" 
    toggleable="true" 
    closable="false" 
    toggleSpeed="500" 
    closeSpeed="500">

    <h:form>    

        <p:inputText 
            id="queryStringInput"
            name="queryStringInput"
            value="#{dBean.queryString}" />

    <h:link 
        id="link"
        outcome="pretty:content" 
        value="Search" >

        <f:param 
            id="queryString"
            name="queryString" 
            value="#{dBean.queryString}" />

    </h:link>   

    </h:form>       

</p:panel> 

我也尝试让bean进行转发工作:

网页代码:

<p:panel 
    id="quickSearch" 
    header="Quick Search" 
    toggleable="true" 
    closable="false" 
    toggleSpeed="500" 
    closeSpeed="500">

    <h:form>    

        <p:inputText 
            id="queryStringInput"
            name="queryStringInput"
            value="#{dBean.queryString}" />

        <p:commandButton 
            id="submitQuery"
            ajax="false"
            value="Search"
            actionListener="#{dBean.runSearch}" />

    </h:form>       

</p:panel>

Bean:

public void runSearch() {
    logger.debug("the query string is: " +getQueryString());

    FacesContext context = FacesContext.getCurrentInstance();
    NavigationHandler handler = FacesContext.getCurrentInstance().getApplication().getNavigationHandler();

    String url = "/content?queryString=" + getQueryString();
    handler.handleNavigation(context, null, url);

}   

我似乎无法以我想要的方式工作。以下是漂亮配置的片段:

<url-mapping id="content">
    <pattern value="/content"/>
    <query-param name="queryString">#{searchCriteria.queryString}</query-param>
    <view-id value="/pages/content.jsf"/>
</url-mapping>

我认为只要它起作用,它(从页面代码或bean)完成的方式并不重要。

提前感谢您提供的所有帮助。

1 个答案:

答案 0 :(得分:1)

您在pretty-config中引用了searchCriteria bean。你可以将它用于你的p:inputText值(反之亦然)?漂亮的面孔应该接受查询参数。

<p:inputText 
    id="queryStringInput"
    name="queryStringInput"
    value="#{searchCriteria.queryString}" />

<p:commandLink
    id="submitQuery"
    value="Search"
    type="submit"
    action="pretty:content">
</p:commandLink>