首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >同步会话作用域托管bean

同步会话作用域托管bean
EN

Stack Overflow用户
提问于 2011-01-13 01:04:03
回答 1查看 909关注 0票数 0

我的JSF2.0应用程序中有两个屏幕。屏幕1搜索学生并在表中列出学生。结果表中的学生名称是指向“学生详细信息”页面(屏幕2)的链接。

我的托管豆:

代码语言:javascript
复制
@SessionScoped
public class TestController {
private Student studentOnUI; // Student being viewed on the UI 
// synchronized public getters and setters
public String viewStudentAction(String studentId) {
    this.studentOnUI = getStudentFromDB( studentId );   
    return "studentDetailedPage";
}
public synchronized String clearSearchAction() {
    this.studentOnUI = null;
    return "studentSearchPage";
}

屏幕1 xhtml片段

代码语言:javascript
复制
<!-- search fields -->
<h:commandButton  
    value="Clear Search"
    action="#{testController.clearSearchAction()}"/>
<!-- Search button -->
<!-- search results table -->

屏幕2 xhtml片段

代码语言:javascript
复制
<h:outputText value="#{testController.studentOnUI.name}" />
<h:dataTable 
  value="#{testController.studentOnUI.subjects}"
  var="subject">
  <h:outputText value="#{subject.score}"/>
</h:dataTable>

我面临以下问题:

  1. 在运行搜索后,用户单击一个学生名称(进入屏幕2)
  2. ,当屏幕2的呈现响应阶段正在进行(该阶段具有testController.studentOnUI的EL引用)时,用户单击clear按钮(无需等待第一个请求完成)。现在,处理清除请求的线程将testController.studentOnUI设置为null,处于呈现响应阶段的第一个线程在计算testController.studentOnUI时抛出NullPointerException。

尽管托管bean处理同步(正确吗?)它不能解决这里的并发问题,因为可能会发生以下情况

  1. Thread 1(处理导航到屏幕2的请求)-计算#{testController.studentOnUI.name}并愉快地呈现值。然后退出testController.getStudentOnUI()同步方法。因此,线程1不再拥有控制器实例的锁(在会话范围内)。上下文切换happens.
  2. Thread 2(处理清除搜索结果的请求)-在clearSearchAction()中testController.studentOnUI = null。上下文开关happens.
  3. Thread 1-计算页面中的下一个EL (#{testController.studentOnUI.subjects})并抛出一个NullPointerException ( testController.studentOnUI现在为null)。

请了解我在这个方法中做错了什么,或者是否需要在这里采用不同的方法。

EN

回答 1

Stack Overflow用户

发布于 2011-01-13 21:22:28

这是非常奇怪的行为,但我宁愿禁用JavaScript第一页上的链接,使其“不可点击”。尝试使用jQuery:

1按钮:$(‘#按钮’).attr(“禁用”,真);

2链接:$(‘a.something’).click(函数(E){ e.preventDefault();});

我不确定备份bean中的同步,因为JSF必须将锁放在sure对象上,而不是clear方法。我说错了吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4675806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档