Javascript JSF/Spring一页多会话-多选项卡界面

Javascript JSF/Spring一页多会话-多选项卡界面,javascript,spring,user-interface,jsf-2,primefaces,Javascript,Spring,User Interface,Jsf 2,Primefaces,我正在尝试向我的JSF(facelets)/Spring/应用程序中添加多个选项卡功能,类似OpenBravo已经有了(但他们的应用程序使用了不同的技术-我猜-纯JavaScript for GUI):每个文档或报告都可以在单独的JavaScript选项卡中打开 基本上很简单——每个文档或报告都是独立的JSF区域,并且只有一个是可见的。选项卡只是视觉效果 问题是与JSF支持bean(或者有时可以在这个角色中使用的Springbean)的通信。E.E.对于一个选项卡界面来说很简单:可以创建以下be

我正在尝试向我的JSF(facelets)/Spring/应用程序中添加多个选项卡功能,类似OpenBravo已经有了(但他们的应用程序使用了不同的技术-我猜-纯JavaScript for GUI):每个文档或报告都可以在单独的JavaScript选项卡中打开

基本上很简单——每个文档或报告都是独立的JSF区域,并且只有一个是可见的。选项卡只是视觉效果

问题是与JSF支持bean(或者有时可以在这个角色中使用的Springbean)的通信。E.E.对于一个选项卡界面来说很简单:可以创建以下bean:

class BankDocumentServiceBean {
    BankDocument selectedDocument;
    Long id;

    void setId(Long id) {
        if (selectedDocument.id!=id) {
            setupBankDocument(id);
        }
    }
    void setupBankDocument(Long id) {...}
    BankDocument getBankDocument() {...}
    ...
}
BankDocument JSF页面可以是这样的:

...
<f:metadata> <!-- page is called with parameter id and this code calls setId(...) -->
    <f:viewParam name="id" value="#{bankDocumentServiceBean.id}"/>  
</f:metadata>

<h:body>
...
    <!-- p for Primefaces -->
    <p:inputText id="amountTxt" 
        value="#{bankDocumentServiceBean.selectedDocument.amount}" 
        required="true" label="amountLbl"/>  
    <p:message for="amountTxt" />  
    ...
。。。
...
...
这种方法总体上好吗

主要问题是-如何将这种单文档方法扩展到多个选项卡。JSF代码可以动态地包含在页面中,但服务bean仍然是问题所在。在每次调用中使用附加参数可以是一种解决方案-例如,BankDocumentServiceBean可以不包含单个BankDocument,而是包含BankDocuments列表,并且每个操作段(例如getBankDocument)可以具有附加标识符,用于从集合中选择正确的bean,即。,与用户交互的选项卡相关的bean

但也许有更好的方法。例如,一个页面可能是旧的良好单文档BankDocumentServiceBean的多个实例。也许有一些不太粗糙的作用域(JSF作用域和Spring作用域)适合于制表符,一些对话作用域

每个选项卡都位于其自己的通用面板(div)中,具有不同的id。也许JSF/Spring应用程序可以检测到请求来自不同的面板/div,并相应地选择BankDocumentServiceBean的实例


我猜-使用列表和参数的解决方案会起作用,但也许有更好的体系结构?谢谢

这不是一个完整的解决方案,但却是在jsf web应用程序中处理多个浏览器选项卡的良好起点:

  • 关于处理多个选项卡的一本非常好的读物:

  • 我还建议使用范围


  • 我们也在使用CODI,我们对此非常满意!