从支持bean更改浏览器URL

时间:2011-02-21 16:27:47

标签: jsf

我希望能够更改网址栏中的文字以反映我的应用的当前状态(就像GMail一样)。

主要是指我更改url参数以反映表单中的值。 (一旦用户输入参数,我想更改对应的url参数)

关于如何做到这一点的任何想法?

谢谢!

1 个答案:

答案 0 :(得分:2)

就此而言,您希望触发HTTP GET请求而不是HTTP POST请求。更改视图方面很简单,请使用

<form action="targetpage.jsf">

而不是

<h:form>

在与targetpage.jsf关联的托管bean中,您需要进行更多更改。 JSF 1.2不提供通过视图声明为您设置GET请求参数的工具,也不提供转换/验证参数(JSF 2.0为此<f:viewParam>)。

您需要在支持bean的构造函数和/或@PostConstruct中自己收集/转换/验证所有请求参数,并在那里调用操作。基本上有两种方法来收集参数:

  • 将参数定义为<managed-property><managed-bean>的{​​{1}},以便JSF为您设置。

    E.g。

    faces.config.xml

    (将在HTML中生成<h:inputText id="input" /> ,它是<input type="text" id="input" name="input" />属性,用作请求参数名称;如果您不确定,请在浏览器中右键单击页面并查看源代码)

    name

    <managed-property>
        <property-name>input</property-name>
        <value>#{param.input}</value>
    </managed-property>
    

    EL支持自动转换为原始类型及其包装器,因此数字也可以使用private String input; // +setter 。然而,需要注意的是,当值不能作为数字解析时,这将抛出一个丑陋且不可处理的异常。

  • 或者,通过ExternalContext#getRequestParameterMap()自行收集。

    private Long input;

    这允许更精细的转换/验证/错误处理。