Kur*_*t X 7 cookies session response request vaadin
我想我应该使用应用程序范围会话来处理它.但我对此没有任何经验.我尝试了从互联网上获得的不同方式:
HttpServletRequest request;
HttpSession sess = request.getSession();
sess.setAttribute("name", name);
later in other page
HttpServletRequest request;
String=(String)request.getAttribute(name);
//or HttpSession sess = request.getSession();
// sess.getAttribute(name);
Run Code Online (Sandbox Code Playgroud)
一切都行不通.我认为vaadin处理这个问题可能有些特别之处.请帮我.
Bas*_*que 14
请参阅此张贴有关Vaadin 7的范围级别由罗兰克鲁格VaadinSession和UI类.他包括与Vaadin 6的比较.好的文章,除了手动锁定的讨论已经过时了Vaadin 7.1(请参阅我对该页面的评论,并查看我对类似问题的回答).
了解尽管Vaadin 6和Vaadin 7的大部分相似或相同,但在这个主题上,6和7完全不同,涉及不同的架构和不同的类.
请注意,我们正在讨论VaadinSession
,而不是HTTP或Servlet会话.VaadinSession包装或包含Servlet会话,因此我们不必关心Servlet级别.
此VaadinSession表示单个用户的工作会话.用户打开一个或多个窗口/标签(UI
实例).
上面的图表有点过分简化了.这是一个更详细的.
Vaadin 7支持在同一个Vaadin应用程序上打开多个浏览器窗口/标签.这是Vaadin 6对建筑的重大改变.
每个浏览器窗口/选项卡的内容是您的UI
子类的实例.所有这些实例都属于同一个实例VaadinSession
.如果用户单击浏览器窗口/选项卡上的重新加载功能,UI
则会销毁该实例并实例化一个新实例.但是VaadinSession
忍受了.添加@PreserveOnRefresh
注释会更改该行为以保留相同的UI实例,但这不是重点.
关键是Vaadin 7有两个范围:
VaadinSession
(你的整个应用程序) UI
(每个浏览器窗口/选项卡). 您可能希望在任一级别存储数据.例如,用户登录/身份验证信息应该包含在VaadinSession中.
UI
要在UI上存储数据,请将字段或集合添加到UI子类.简单而明显.
VaadinSession
要在VaadinSession上存储数据,请调用setAttribute
和getAttribute
.你必须投射结果.简单,除了一个捕获:线程安全.
您可以手动管理锁定以同时保护VaadinSession.但是,如果遵循记录的规则,Vaadin将为您提供线程安全保护.
如果从通常的主用户界面线程修改VaadinSession,没问题.你在主线程中在Vaadin中做的大多数事情都已经影响了VaadinSession对象.这就是你的应用程序所在的位置.因此,Vaadin已经自动提供了线程安全锁定.
如果从另一个线程使用VaadinSession,请在Runnable中调用您传递给access
UI或VaadinSession对象上的方法.如果除了会话之外还影响任何用户界面布局或窗口小部件,请access
在UI方法上调用该方法.如果仅影响会话而不影响用户界面,请access
在VaadinSession上传递Runnable 方法.
仅供参考,您可以使用更广泛的范围.如果您有"全局"数据或对象在所有用户的会话中共享应用程序范围,则可以访问该ServletContext
对象."上下文"表示您的Web应用程序的世界,即您的Web应用程序可以访问的内容.您的Vaadin应用程序有一个ServletContext
由Servlet容器自动实例化的对象.调用这对方法,getAttribute
然后setAttribute
存储Object
你拥有的任何方法.
有关更多信息,请参阅我的问题和答案,如何ServletContext
从Vaadin 7应用程序中访问?.
总结一下文本(和下图):一个Servlet容器,如Tomcat或Jetty,可以运行一个或多个Vaadin Web应用程序.每个Web应用程序都有一个ServletContext
由容器自动管理的对象,其中get/setAttribute
方法可以存储您选择的任何对象.每个Vaadin Web应用程序都VaadinSession
为每个用户的当前工作会话提供一个对象.每个VaadinSession
对象包含一个或多UI
个子类实例,表示在Web浏览器的窗口/选项卡(或Portlet视图区域)中看到的内容.每个UI
子类实例都可以包含任意数量的成员变量,就像任何POJO一样.
提示:如果需要,您的Runnable可以在Java 8中使用新的更短的Lambda语法.NetBeans 8甚至会建议这样做.
归档时间: |
|
查看次数: |
5510 次 |
最近记录: |