我还没有找到通过URL参数将参数传递给JSF页面的方法。
http://www.example.com/jsfApp.jsp?param1=value1¶m2=value2
有人能指出我正确的方向吗?
答案 0 :(得分:24)
当你使用JSP时,我假设你使用的是JSF 1.x.
要创建包含查询参数的链接,请将h:outputLink
与f:param
:
<h:outputLink value="page.jsf">
<f:param name="param1" value="value1" />
<f:param name="param2" value="value2" />
</h:outputLink>
value
可以借助EL动态设置。
要在托管bean中自动设置它们,您需要在managed-property
中将每个定义为faces-config.xml
:
<managed-bean>
<managed-bean-name>bean</managed-bean-name>
<managed-bean-class>com.example.Bean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>param1</property-name>
<value>#{param.param1}</value>
</managed-property>
<managed-property>
<property-name>param2</property-name>
<value>#{param.param2}</value>
</managed-property>
</managed-bean>
隐式EL变量#{param}
引用了Servlet API中的请求参数映射。当然,bean应该同时拥有param1
和param2
属性,并定义适当的getter / setter。
如果您想在设置后直接执行某些逻辑,请使用@PostConstruct
注释:
@PostConstruct
public void init() {
doSomethingWith(param1, param2);
}
有关在JSF中传递参数和类型的更多提示,您可能会发现this article很有用。
JSF 2.x方法将在支持bean类中使用@ManagedProperty
,或在目标视图中使用<f:viewParam>
。另请参阅此问题:ViewParam vs @ManagedProperty(value = "#{param.id}")