JSF - 关于生命周期的另一个问题

mar*_*zzz 1 jsf page-lifecycle facelets javabeans jsf-2

今天我想了解JSF生命周期的一些功能.让我开始吧:

1 - 阶段2:应用请求值 - 在此阶段,视图中的每个组件将在请求中搜索其值并将新值设置为它们

嗯,好的.因此,View将由于之前的Beans参数而构建.之后,有一个部分视图,使用请求值生成.(对吧?之后,在3°阶段,他们将进行比较).但是,例如,如果在创建最后一个视图期间缺少请求列表中的值?值将为null?

2 - 阶段5:调用应用程序 - 一旦将请求的所有值成功设置到辅助bean,将处理在应用请求值阶段排队的操作事件.在我们的例子中,提交按钮动作方法.

这根本不清楚.此时我(在bean上)从前一阶段更新的值(如果验证和应用请求未失败).好的,现在发生了什么?在处理申请请求值阶段期间排队的操作事件的含义什么?这意味着,例如,如果操作是提交,则该过程已完成?这就是为什么ajax调用,如果不在2°阶段呈现,将会失败?或者失败的地方?

3 - 阶段6:渲染响应 - 在此阶段,组件树将呈现给客户端.

这意味着使用更新的bean值更新服务器上的View?然后,在此之后,HTML代码是从此视图创建的?或者只是它制作了HTML代码并保存了View状态?

希望你能帮我 :)

Bal*_*usC 8

阶段2:应用请求值 - 在此阶段,视图中的每个组件将在请求中搜索其值并将新值设置为它们

嗯,好的.因此,View将由于之前的Beans参数而构建.之后,有一个部分视图,使用请求值生成.(对吧?之后,在3°阶段,他们将进行比较).但是,例如,如果在创建最后一个视图期间缺少请求列表中的值?值将为null?

基本上以下是发生在幕后(这里,inputUIInputrequestHttpServletRequest):

if (input.isRendered()) {
    String value = request.getParameter(input.getClientId());
    if (value != null) {
        input.setSubmittedValue(value);
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,如果没有请求参数,它们将不受影响.它们不会被设置,null只是保持默认.


阶段5:调用应用程序 - 一旦将请求的所有值成功设置到辅助bean,将处理在应用请求值阶段排队的操作事件.在我们的例子中,提交按钮动作方法.

这根本不清楚.此时我(在bean上)从前一阶段更新的值(如果验证和应用请求未失败).好的,现在发生了什么?在处理申请请求值阶段期间排队的操作事件的含义是什么?这意味着,例如,如果操作是提交,则该过程已完成?这就是为什么ajax调用,如果不在2°阶段呈现,将会失败?或者失败的地方?

在第二阶段,基本上也会发生以下情况(这里,commandUICommand,request现在HttpServletRequestActionEventActionEvent):

if (command.isRendered()) {
    String value = request.getParameter(command.getClientId());
    if (value != null) {
        command.queueEvent(new ActionEvent(command)); // Queue for INVOKE_ACTION.
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,在调用应用程序阶段期间,将调用排队等待特定阶段的所有事件.


阶段6:渲染响应 - 在此阶段,组件树将呈现给客户端.

这意味着使用更新的bean值更新服务器上的View?然后,在此之后,HTML代码是从此视图创建的?或者只是它制作了HTML代码并保存了View状态?

在此阶段,JSF遍历组件树,所有组件都将被编码(将调用Renderer所有组件,默认情况下为HTML渲染器).在编码期间,将仅从模型获得值.视图本身不会更新.基本上:

facesContext.getViewRoot().encodeAll();
Run Code Online (Sandbox Code Playgroud)

  • 别客气.如果您了解基本的Servlet API(在深入了解JSF之前是强制性的恕我直言),那么您可能会找到[此答案](http://stackoverflow.com/questions/3541077/design-patterns-web-based-applications/3542297 #3542297)也很有用,以了解平均MVC框架如何在Servlet API之上工作.通过这种方式,您可以更好地理解*在这样的MVC框架的掩护下发生了什么*;) (2认同)