我希望能够更改网址栏中的文字以反映我的应用的当前状态(就像GMail一样)。
主要是指我更改url参数以反映表单中的值。 (一旦用户输入参数,我想更改对应的url参数)
关于如何做到这一点的任何想法?
谢谢!
答案 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;
这允许更精细的转换/验证/错误处理。