gpt4 book ai didi

jsf-2 - FacesContext 和 ExternalContext 有什么区别

转载 作者:行者123 更新时间:2023-12-03 09:22:31 36 4
gpt4 key购买 nike

FacesContext 和有什么区别和 ExternalContext ?我什么时候可以使用其中一种?一个有什么,另一个有什么?

以下示例来自 JavaServer Faces 第 3 版一书:

 <h:commandButton ... actionListener="#{rushmore.handleMouseClick}" />

支持 bean :
public void handleMouseClick(ActionEvent e) {
FacesContext context = FacesContext.getCurrentInstance();
String clientId = e.getComponent().getClientId(context);
Map<String, String> requestParams = context.getExternalContext().getRequestParameterMap();
// ...
}

为什么 ExternalContext 中的请求参数?什么是 clientId ?它是在应用程序启动时由 JSF 生成的吗?

最佳答案

仔细查看他们的 javadocs 以了解他们提供的方法以及这些方法的具体作用。

  • FacesContext javadoc
  • ExternalContext javadoc

  • 如果您仔细查看 javadoc 中列出的那些方法,您会注意到 FacesContext通常提供对 JSF 特定工件的访问,这些工件与 JSF 设计为在其上运行的“底层”Servlet 或 Portlet API 没有任何关系。例如。创建转换器、验证器、组件、EL 表达式等,并获取有关 View 根、支持的语言环境等的信息,并添加阶段监听器、系统事件监听器等。特定于 JSF API 的所有内容。

    并且, ExternalContext通常提供对 JSF 当前“在幕后”使用的 Servlet 或特定于 Portlet 的工件的访问。例如,在 Servlet 容器上运行时, HTTP servlet request , HTTP servlet response , HTTP sessionServlet context并且本质上也是他们所有的文物。单击这些链接,您会看到它们依次提供同样由 ExternalContext 委托(delegate)的方法。 ,如 getRequestParameterMap() .另见 the javadoc .是的,也单击该链接,您会看到它明确提到了 servlet 请求:

    Servlet: This must be the set of parameters available via the javax.servlet.ServletRequest methods getParameter() and getParameterNames().



    没有什么可以提供的两个上下文。因此,绝对没有理由偏爱其中一个。只需将正确的用于您需要执行的工作即可。

    至于客户端ID,确实是JSF生成的,但绝对不是服务器启动时生成的。它只是基于每个 View 为每个 JSF 组件生成的。如果输入组件如 <h:inputText> ,生成 HTML <input>元素,它也变成 name像这样的属性
    <input type="text" id="formId:inputId" name="formId:inputId" ... />
    formId:inputId正是 JSF 客户端 ID。它成为请求参数名称。命令按钮的 HTML 表示也有 name最终作为请求参数名称,按钮的值作为参数值。

    关于jsf-2 - FacesContext 和 ExternalContext 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15850162/

    36 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com