来自一个页面的JSF / Spring多个会话 - 多标签界面

时间:2013-05-01 19:49:02

标签: javascript spring user-interface jsf-2 primefaces

我正在尝试为我的JSF(facelets)/ Spring /应用程序添加多标签功能,就像OpenBravo已经有的那样(http://wiki.openbravo.com/w/images/9/9c/WIK_PartsOfScreen.png,但是他们的应用程序使用了不同的技术 - 我想 - 用于GUI的纯JavaScript ):每个文档或报告都可以在单独的JavaScript选项卡中打开。

基本上它很简单 - 每个文档或报告都是单独的JSF区域,只有其中一个可见。标签只是视觉效果。

问题是与JSF支持bean(或有时可以在此角色中使用的Spring bean)的通信。 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应用程序可以检测到该请求来自不同的panel / div并相应地选择了BankDocumentServiceBean实例?

我想 - 使用List和参数的解决方案可行,但也许有更好的架构吗?谢谢!

1 个答案:

答案 0 :(得分:2)

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

  1. 处理多个标签时非常好的阅读:http://myfaces.apache.org/orchestra/myfaces-orchestra-core/multiwindow.html

  2. 我还建议使用Apache Codi范围。