vma*_*ric 29 facescontext jsf-2 externalcontext
FacesContext和之间有什么区别ExternalContext?我什么时候可以使用其中一个?什么有一个什么有另一个?
以下示例来自JavaServer Faces第3版:
<h:commandButton ... actionListener="#{rushmore.handleMouseClick}" />
Run Code Online (Sandbox Code Playgroud)
支持豆:
public void handleMouseClick(ActionEvent e) {
FacesContext context = FacesContext.getCurrentInstance();
String clientId = e.getComponent().getClientId(context);
Map<String, String> requestParams = context.getExternalContext().getRequestParameterMap();
// ...
}
Run Code Online (Sandbox Code Playgroud)
为什么请求参数在ExternalContext?什么是clientId?它是在应用程序启动时由JSF生成的吗?
Bal*_*usC 43
仔细查看他们的javadoc,看看他们提供了哪些方法以及这些方法究竟是做什么的.
如果仔细观察javadoc中列出的那些方法,您会发现FacesContext通常提供对特定于JSF的工件的访问,这些工件与JSF设计为运行的"底层"Servlet或Portlet API无关.在之上.例如,创建转换器,验证器,组件,EL表达式等,并获取有关视图根,支持的语言环境等的信息,并添加相位侦听器,系统事件侦听器等.所有特定于JSF API的东西.
并且,ExternalContext通常提供对JSF当前正在使用的Servlet或Portlet特定工件的访问.例如,在Servlet容器上运行时,HTTP servlet请求,HTTP servlet响应,HTTP会话和Servlet上下文以及它们本身的所有工件.单击这些链接,您将看到它们反过来提供的方法也被委派了ExternalContext,例如getRequestParameterMap().另见javadoc.是的,也点击该链接,您将看到它明确提到了servlet请求:
Servlet:这必须是通过
javax.servlet.ServletRequest方法getParameter()和可用的参数集getParameterNames().
有没有什么可以由被提供两种环境.所以绝对没有理由更喜欢这一个或另一个.只需使用正确的一个来完成您需要执行的工作.
至于客户端ID,它确实是由JSF生成的,但绝对不是在服务器的启动上.它是基于每个视图为每个JSF组件生成的.在输入组件的情况下,如<h:inputText>生成HTML <input>元素,它也会变成这样的name属性
<input type="text" id="formId:inputId" name="formId:inputId" ... />
Run Code Online (Sandbox Code Playgroud)
这formId:inputId正是JSF客户端ID.它成为请求参数名称.命令按钮的HTML表示也有一个name最终作为请求参数名称,按钮的值作为参数值.
| 归档时间: |
|
| 查看次数: |
25752 次 |
| 最近记录: |