Передайте значения inputField как queryString на другую страницу в JSF

Я пытаюсь разрешить пользователю ввести строку в компонент inputText, а затем, нажав клавишу ввода или щелкнув кнопку/ссылку, передать введенную строку на другую страницу в качестве параметра с именем «queryString».

Я использую Prime Faces и Pretty Faces.

Я пробовал разные вещи. Работа с самим кодом страницы 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>

Боб :

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-компонента), пока это работает.

Спасибо за любую помощь заранее.


person SpockJenkins    schedule 08.11.2013    source источник


Ответы (1)


Вы ссылаетесь на bean-компонент searchCriteria в файле pretty-config. Можете ли вы использовать это для вашего значения p: inputText (или наоборот)? Тогда красивые лица должны подобрать параметр запроса.

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

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