当前位置: 首页 > news >正文

网站搜索框设计网站录屏可以做证据吗

网站搜索框设计,网站录屏可以做证据吗,洛阳市城市建设网站,企业速成网站会话作用域跨越多个HTTP请求-响应周期#xff08;理论上是无限的#xff09;。 当您需要每个HTTP请求-响应周期进行一次交互时#xff0c;请求作用域在任何Web应用程序中都非常有用。 但是#xff0c;当您需要对属于用户会话的任何HTTP请求-响应周期可见的对象时#xf… 会话作用域跨越多个HTTP请求-响应周期理论上是无限的。 当您需要每个HTTP请求-响应周期进行一次交互时请求作用域在任何Web应用程序中都非常有用。 但是当您需要对属于用户会话的任何HTTP请求-响应周期可见的对象时则需要一个会话范围 在这种情况下只要HTTP会话存在该bean就一直存在。 会话作用域允许您创建对象并将其绑定到会话。 它在会话中涉及此bean的第一个HTTP请求时创建并在HTTP会话无效时销毁。 请求范围存在于JSF和CDI中并且以相同的方式起作用。 它可以用于非富AJAX和非AJAX请求。 会话范围注释 JSF JSF请求范围注释是SessionScoped javax.faces.bean.SessionScoped 。 具有此范围的bean应该使用ManagedBean javax.faces.bean.ManagedBean 进行注释。 默认范围是RequestScope 。 CDI CDI请求范围注释为SessionScoped javax.enterprise.context.SessionScoped 。 具有此范围的bean应该用Named javax.inject.Named 注释。 对于CDI托管bean Named 默认范围是Dependent伪作用域。 简单的例子 // index.xhtml h:body h4Same view after submit (index.xhtml):/h4h:formh:commandButton valueCount action#{countBean.countActionVoid()}//h:formCurrent value: #{countBean.count}h4Forward to another view after submit (count.xhtml):/h4h:formh:commandButton valueCount action#{countBean.countActionAndForward()}//h:formCurrent value: #{countBean.count}h4Redirect to another view after submit (count.xhtml):/h4h:formh:commandButton valueCount action#{countBean.countActionAndRedirect()}//h:formCurrent value: #{countBean.count}h4AJAX :/h4h:formh:commandButton valueCount action#{countBean.countActionVoid()}f:ajax rendercurrentValueId//h:commandButton/h:formh:outputText idcurrentValueId valueCurrent value: #{countBean.count}/ /h:body// count.xhtml h:body Current value: #{countBean.count} /h:body// CountBean.java import java.util.logging.Logger; import java.io.Serializable; // for JSF import javax.faces.bean.ManagedBean; import javax.faces.bean.SessionScoped; // for CDI import javax.inject.Named; import javax.enterprise.context.SessionScoped;// JSF vs CDI ManagedBean Named SessionScoped SessionScoped public class CountBean implements Serializable {private static final Logger LOG Logger.getLogger(CountBean.class.getName());private int count;public CountBean() {LOG.info(CountBean#Initializing counter ...);count 0;}public void countActionVoid() {LOG.info(CountBean#countActionVoid() - Increasing counter ...);count;}public String countActionAndForward() {LOG.info(CountBean#countActionAndForward() - Increasing counter ...);count;return count;}public String countActionAndRedirect() {LOG.info(CountBean#countActionAndRedirect() - Increasing counter ...);count;return count?faces-redirecttrue;;}public int getCount() {return count;}public void setCount(int count) {this.count count;} } 完整的应用程序可在此处获得 。 因此当通过AJAX在同一视图或另一个视图或重定向机制中通过前进机制返回时 count数值将增加1 。 这揭示了两个方面 每个用户会话一次调用CountBean构造函数以创建一个新实例。 这意味着count仅用0初始化一次。 当前用户会话中触发的其他请求将使用此CountBean实例。 我们说每个用户都有一个CountBean实例。 会话作用域在转发或重定向时不会丢失对象的状态。 在session被销毁之前对象的状态一直可用例如会话超时无效等。 基本上在向会话范围的bean提交数据时必须注意。 只要当前用户会话提交的数据将“有效”。 因此一个好的实践将告诉您不要在会话中存储大量数据尤其是在内存是关键资源的情况下。 实现可序列化 JSF和CDI托管bean应该声明为Serializable implements Serializable 。 这是必需的因为容器可能会将会话数据持久化序列化到硬盘上。 这样一来容器就可以管理重载之类的紧急情况或者仅与集群中的其他服务器共享数据或者在服务器重启期间恢复会话。 会话范围编程访问 您可以通过编程方式与会话范围进行交互如下所示 访问会话范围图 // JSF 2.0-2.2 FacesContext context FacesContext.getCurrentInstance(); MapString, Object requestMap context.getExternalContext().getSessionMap();// JSF 2.3 Inject SessionMap private MapString, Object sessionMap;// OmniFaces MapString, Object requestmap Faces.getSessionMap(); 获取会话范围的属性 // JSF 2.0 - 2.3 sessionMap.put(name, value);// OmniFaces Faces.setSessionAttribute(name, value); 删除会话范围的属性 // JSF 2.0-2.3 Object value sessionMap.remove(name);// OmniFaces T value Faces.removeSessionAttribute(name); 在JSF页面中可以使用隐式对象#{sessionScope} 例如获取CountBean实例 #{sessionScope.countBean} 。 其中会话映射将包含在会话范围 SessionScoped (JSF/CDI 下声明的托管bean实例。 对于JSF托管Bean不是CDI托管Bean在这种情况下密钥非常复杂您可以通过它们的名称轻松地标识此类Bean这些名称在会话图中成为密钥。 因此您将能够在会话映射中的countBean项下找到该JSF托管Bean的实例。 如果您通过ManagedBean name ” some_name “指定bean名称则some_name将成为会话映射中的键。 因此通过会话映射您可以访问会话范围内的JSF托管bean的属性如下所示 String count ((CountBean)(Faces.getSessionAttribute(countBean/some_name))).getCount(); 这样做也是完全合法的这是指当前的bean ManagedBean(namesome_name) ... String bean_name getClass().getAnnotation(ManagedBean.class).name(); int count ((CountBean)(Faces.getSessionAttribute(bean_name))).getCount(); 现在您可以轻松地了解如何使用存储在会话映射中的托管bean。 使用 通常在托管bean中我们需要编写一个带有PostConstruct注释的方法以基于注入的工件来完成初始化任务。 换句话说 PostConstruct注释用于需要依赖注入完成以执行任何初始化之后需要执行的方法。 当初始化不涉及注入的工件时可以使用构造函数进行初始化。 对于会话作用域的Bean在创建会话作用域的Bean实例后将仅调用一次用PostConstruct注释的方法。 JSF托管bean示例 import java.io.Serializable; import javax.faces.bean.ManagedBean; import javax.faces.bean.SessionScoped;ManagedBean SessionScoped public class InitBean implements Serializable{private int init;public InitBean() {init 5;}public int getInit() {return init;}public void setInit(int init) {this.init init;} }import java.io.Serializable; import javax.faces.bean.ManagedBean; import javax.faces.bean.SessionScoped;ManagedBean SessionScoped public class CountBean implements Serializable {ManagedProperty(#{initBean})private InitBean initBean;PostConstructpublic void init(){LOG.info(CountBean#Initializing counter with PostConstruct ...);count initBean.getInit();}public void setInitBean(InitBean initBean) {this.initBean initBean;} ... } CDI托管Bean示例 import java.io.Serializable; import javax.enterprise.context.SessionScoped; import javax.inject.Named;Named SessionScoped public class InitBean implements Serializable {private int init;public InitBean() {init 5;}public int getInit() {return init;}public void setInit(int init) {this.init init;} }import java.io.Serializable; import javax.inject.Inject; import javax.enterprise.context.SessionScoped; import javax.inject.Named;Named SessionScoped public class CountBean implements Serializable {Injectprivate InitBean initBean;PostConstructpublic void init(){LOG.info(CountBean#Initializing counter with PostConstruct ...);count initBean.getInit();}... }注入和会话作用域bean JSF 对于JSF托管的bean注入是通过ManagedProperty完成的。 例如 CDI 对于CDI管理的bean注入是通过Named完成的。 例如 JSF和CDI混合可以在JSF中注入CDI反之亦然 JSF托管Bean限制 作为JSF中的一般规则请勿使用寿命比调用它的对象更短的对象。 换句话说请使用寿命与注入对象相同或更长的对象。 违反此规则将导致JSF异常。 根据此规则在JSF会话范围内的受管Bean中您可以注入会话和应用程序受管Bean但不能请求或查看受管Bean。 可以将JSF托管Bean注入其他JSF托管Bean中。 CDI托管Bean限制 当使用寿命比调用它的对象更短的对象时例如将请求范围的Bean注入会话范围的BeanCDI将用例分类为不匹配的注入并通过CDI解决问题代理。 对于每个请求CDI代理都会重新建立与请求范围的Bean的实时实例的连接。 可以将CDI托管bean注入JSF托管bean中。 以编程方式配置JSF会话范围的托管Bean 从JSF 2.2开始我们可以以编程方式重现faces-config.xml的内容。 对于会话范围内的受管bean相关的代码片段为 Override public void populateApplicationConfiguration (Document toPopulate) {String ns toPopulate.getDocumentElement().getNamespaceURI();Element managedbeanEl toPopulate.createElementNS(ns, managed-bean);Element managedbeannameEl toPopulate.createElementNS(ns, managed-bean-name);managedbeannameEl.appendChild(toPopulate.createTextNode(countBean));managedbeanEl.appendChild(managedbeannameEl);Element managedbeanclassEl toPopulate.createElementNS(ns, managed-bean-class);managedbeanclassEl.appendChild(toPopulate.createTextNode(beans.CountBean));managedbeanEl.appendChild(managedbeanclassEl);Element managedbeanscopeEl toPopulate. createElementNS(ns, managed-bean-scope);managedbeanscopeEl.appendChild(toPopulate. createTextNode(session));managedbeanEl.appendChild(managedbeanscopeEl);...// programmatic create managed-property...toPopulate.getDocumentElement().appendChild(managedbeanEl); } 完整的应用程序可以在精通JSF 2.2的书中看到。 在XML文件中配置JSF请求范围的托管Bean 通过XML配置您可以使用旧的JSF 1.x机制在普通的faces-config.xml文件中定义托管bean。 例如 ... managed-beanmanaged-bean-namecountBean/managed-bean-namemanaged-bean-classbeans.CountBean/managed-bean-classmanaged-bean-scopesession/managed-bean-scope...!-- managed bean properties -- via managed-property/... /managed-bean ... 受管bean应该在单独的XML文件中定义因为faces-config.xml用于设置应用程序级别的配置。 基本上如果您喜欢这种方法请创建一个新的XML文件并将受管bean的详细信息放入其中。 最后通过web.xml文件中的javax.faces.CONFIG_FILES上下文参数声明XML文件。 ... context-paramparam-namejavax.faces.CONFIG_FILES/param-nameparam-valueWEB-INF/my-manage-beans.xml/param-value /context-param ... 在下一篇关于JSF / CDI应用程序范围的文章中见。 翻译自: https://www.javacodegeeks.com/2015/11/jsf-scopes-tutorial-jsfcdi-session-scope.html
http://www.sadfv.cn/news/196209/

相关文章:

  • 中文网站建设哪家好个人简历模板网站
  • 公司网站优化去哪里学腾讯会议开始收费
  • 建设汽车网站用幽默的语言来形容网站开发
  • 浙江建设培训中心网站目前做哪些网站致富
  • 广州企业网站seo临沂做网站公司哪家好
  • 网站怎么做关键词优化百度登录注册
  • 适合学生做的网站类型网络营销就是网络销售
  • 网站发的文章如何优化世界青田网app
  • 在线视频网站如何制作建设一个下载资料的网站
  • 软件工程毕业可以做网站吗网站模块划分规划
  • 网站建设案例分享门户建设开源软件
  • 网站建设会议报道如何改wordpress主页
  • 免费网站制作软件平台做网站用vps还是虚拟主机
  • 桥头镇网站仿做大连建设网网址
  • 做外贸有效的网站建筑人才网官方网站入口
  • 浏览器怎么打开网站服务器我想自学建网站
  • 北京营销推广网站建设哈尔滨免费做网站
  • 徐州网站设计制作建设揭阳网站开发mituad
  • 网站建设人员培训纲要建立的短语
  • 响应式网站是啥意思盐城网络优化
  • 政务类网站wordpress 主题 轮播
  • 使用网站的mysql重庆网站建设技术托管
  • 一个人网站运营怎么做门户系统登录
  • 岳阳网站建设设计网站建设管理员工工资多少
  • 微网站的链接怎么做哪种语言做网站最快
  • 建设 公司 网站 请示阿里云网站怎么备案域名解析
  • 营销型网站设计服务商怎样选wordpress主题
  • 北京网站网页设计手机优化助手下载
  • 中企动力科技股份有限公司网站个人申请公众号注册
  • 网站开发公司员工叫什么名字灵寿网站建设