2010-03-16 99 views
9

我还没有设法找到一种方法通过URL参数将参数传递给JSF页面。如何将url参数传递给JSF?

http://www.example.com/jsfApp.jsp?param1=value1&param2=value2 

有人能指出我在正确的方向吗?

回答

21

当您使用JSP时,我假设您使用的是JSF 1.x.

要通过查询参数的链接,使用h:outputLinkf:param

<h:outputLink value="page.jsf"> 
    <f:param name="param1" value="value1" /> 
    <f:param name="param2" value="value2" /> 
</h:outputLink> 

value可以用EL的帮助下动态地设置。

,自动将它们设置在托管bean,你需要在faces-config.xml定义每个为managed-property

<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> 

的imlicit EL变量#{param}指请求参数地图,你从Servlet API的知道这一点。该bean当然已经具有param1param2属性以及定义的适当的获取器/设置器。

如果你想执行它们被设置后直接一些逻辑,利用@PostConstruct注释:

@PostConstruct 
public void init() { 
    doSomethingWith(param1, param2); 
} 

有关将参数更多的提示和诸如此类的东西在左右JSF,你可能会发现有用。

JSF 2.x方法将使用支持bean类中的@ManagedProperty或目标视图中的<f:viewParam>。另请参阅此问题:ViewParam vs @ManagedProperty(value = "#{param.id}")

+0

太棒了!谢谢!! – Ben 2010-03-16 18:10:43

+0

不客气。 – BalusC 2010-03-16 18:12:07