我的JSF 2.0应用程序中有2个屏幕。屏幕1搜索学生并列出表格中的学生。结果表中的学生姓名是指向学生详细信息页面(屏幕2)的链接。
我的托管bean:
@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";
}
screen 1 xhtml snippet
<!-- search fields -->
<h:commandButton
value="Clear Search"
action="#{testController.clearSearchAction()}"/>
<!-- Search button -->
<!-- search results table -->
屏幕2 xhtml片段
<h:outputText value="#{testController.studentOnUI.name}" />
<h:dataTable
value="#{testController.studentOnUI.subjects}"
var="subject">
<h:outputText value="#{subject.score}"/>
</h:dataTable>
我面临以下问题:
虽然托管bean处理同步(正确吗?)但它并没有解决这里的并发问题,因为可能会发生以下情况
感谢我对这种方法做错的指示,或者是否需要采用不同的方法。
答案 0 :(得分:0)
这是非常奇怪的行为,但我宁愿在JavaScript的第一页上禁用链接,使其“无法点击”。 试试jQuery:
1个按钮:$('#button')。attr(“disabled”,true);
2 link:$('a.something')。click(function(e){ e.preventDefault(); });
我不确定支持bean中的同步,因为JSF Controller必须将锁定放在Student对象上,而不是clear方法。我错了吗?