选择如何使用JSF将参数传递给目标bean /页面

时间:2014-03-07 16:56:36

标签: jsf

我已经使用JSF几年了,但在决定如何将参数传递给目标页面/ bean时,我仍然有疑问。

我认为这个问题有点复杂,有些人可能会告诉我把它分解成更小的问题。但是,我也认为下面所有问题的答案是相关的,并且当你想要JSF做的所有事情时,它解决了缺乏直觉性的问题:“转到该页面并将其作为参数传递”。

  1. 首先,如何决定转发和重定向?
  2. 之后,如何选择h:commandLink / h:commandButtonh:linkh:outputLink
  3. 然后,结合我上面选择的选项,我应该使用f:param还是f:setPropertyActionListener?是否将参数正确传递给目标bean,与其范围无关?
  4. 最后,在目标bean /页面上,何时应该使用f:viewParam,还是以编程方式从请求中恢复参数?

1 个答案:

答案 0 :(得分:4)

我将根据自己的经验回答你的问题。其中一些是如此开放,以至于不止一个答案适合。

除非您明确要求更改浏览器网址,否则

前进页面是可行的方法。页面转发基本上比重定向更快,因为它需要更少的步骤。 如果您想要将您的观看成可收藏,则需要页面重定向

仅在您需要 POST 服务器时才使用<h:commandLink /> / <h:commandButton /> 。稍后,您将能够执行页面转发或重定向,具体取决于方法返回的内容。举个例子:

<h:commandLink action="#{bean.processForm}" value="Submit" />
public String processForm(){
    try{
        save();
        return "list";
    }
    catch(Excepcion e){
        addFacesMessage("Error saving");
        //Error saving the object, keep in the same view
        return null;
    }
}

在JSF应用程序中使用<h:link outcome="list" value="Go to list" />进行纯页面到页面导航。您可以使用向前翻页和重定向。使用<f:param />传递视图参数。

<h:outputLink value="www.stackoverflow.com" />可以用于外部链接到其他网站(不在您的应用程序中)。使用<f:param />传递视图参数。然而,我更喜欢在{@ 1}}中使用普通HTML来处理这种情况。

至于将参数传递给 POST 请求中的操作方法,您有几个选项。 <a href="www.stackoverflow.com" />在JSF 1.x中如此受欢迎,但如果你已经在2.x我建议你使用EL 2.2,它允许方法参数声明。能够使用它取决于您正在使用的应用程序服务器,但即使不可用,您也可以自行导入。然后,你将能够做到这样的事情:

f:setPropertyActionListener

尽可能地使用它,它会让事情变得更容易。

对于视图参数,也请使用<h:commandButton action="#{bean.saveCar(currentCar)}" value="Save Car" /> 。这是从GET请求解析参数的标准JSF方式,所以让框架为您执行检索工作!

另见: