Я пытаюсь разрешить пользователю ввести строку в компонент 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-компонента), пока это работает.
Спасибо за любую помощь заранее.