使用 Java 控制器 类 和自定义控件属性

Using Java Controller Classes and Custom Control Properties

以后我想几乎只使用JAVA而不是SSJS。因此,我为每个 XPage 使用一个对应的 Java class 作为一个 "XPage Controller" 类似于 Jesse Gallagher Scaffolding 项目。 这种方法的另一个例子是 ASP.NET 他们正在使用代码隐藏文件。

现在我有一些关于自定义控件属性的体系结构问题。

看看下面的代码片段:

场景 1:"Use custom control properties"

XPage:

<xp:view xmlns:xp="http://www.ibm.com/xsp/core">    
    ...
    <xc:actionButtons showSaveButton="true"></xc:actionButtons>
    ...
</xp:view>

自定义控件:

<xp:button id="btnSave" value="Save" themeId="Button.Command.FormButton" 
    rendered="#{compositeData.showSaveButton}" />

场景 2:"Don't use custom control properties use only the controller class"

这意味着控制器 class(在视图范围内)可以处理所有属性

XPage:

<xp:view xmlns:xp="http://www.ibm.com/xsp/core">    
    ...
    <xc:actionButtons></xc:actionButtons>
    ...
</xp:view>

自定义控件:

<xp:button id="btnSave" value="Save" themeId="Button.Command.FormButton" 
    rendered="#{documentController.showSaveButton}" 
    actionListener="#{documentController.actionSavePerformed}"/>

场景 3:"Use the custom control properties and the controller class together"

XPage:

<xp:view xmlns:xp="http://www.ibm.com/xsp/core">    
    ...
    <xc:actionButtons showSaveButton="#{documentController.showSaveButton}"></xc:actionButtons>
    ...
</xp:view>

自定义控件:

<xp:button id="btnSave" value="Save" themeId="Button.Command.FormButton" 
    rendered="#{compositeData.showSaveButton}" 
    actionListener="#{documentController.actionSavePerformed}"/>

更新

以上三种情况,我试图以一般方式描述我的观点,即如何将自定义控件与控制器结合使用 classes.

现在我的问题是,当我尝试使用 controller classes:

时,我应该如何处理 custom control properties

在我看来,所有相关代码(例如处理按钮的可见性等)都应放在控制器 classes 中。因此,没有必要拥有自定义控件 属性(例如场景 1:compositeData.showSaveButton 与场景 2:documentController .showSaveButton),但另一方面使用自定义控件属性使控件更加独立。在场景 3 中我试图举一个简短的例子,将自定义控件属性与控制器 classes 的优点结合起来(例如 showSaveButton="#{documentController.showSaveButton}"),但这种方法似乎结束了-工程化。

我不确定哪种技术方法最好?

欢迎提出改进(利弊)或更好的架构方法的想法!

NotesIn9 上有很多关于控制器使用的展示类。那里可能有一些有趣的例子。但是要回答你的问题,这真的取决于你。自定义控件可以很容易地进入控制器,但它并不像你说的那样 "independent",但是,由于你使用的是控制器,所以我认为这不是一个问题,因为你可以假设控制器将具有支持自定义控件所需的代码。并且根据自定义控件,您的控制器可以扩展具有内置自定义控件支持的其他控制器。那么它就可以工作了。 但是如果你想通过 compositeData 传递值,你可以。只需创建自定义 属性 并将类型设置为 "java.lang.Object"。然后你可以传入任何你真正想要的东西。 根据控件的不同,我个人倾向于只依赖于控制器。