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

时间:2016-03-15 18:10:17

标签: java xpages xpages-ssjs

将来我想几乎只使用JAVA代替SSJS。因此,我为每个XPage使用相应的Java类作为" XPage控制器"类似于Jesse Gallagher Scaffolding项目。 这种方法的另一个例子是ASP.NET他们正在使用文件后面的代码。

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

请查看以下代码段:

Szenario 1:"使用自定义控件属性"

的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}" />

Szenario 2:&#34;不使用自定义控件属性只使用控制器类&#34;

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

的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}"/>

Szenario 3:&#34;一起使用自定义控件属性和控制器类&#34;

的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}"/>

更新

在上面的三个场景中,我试图以一般方式描述我的观点,如何结合控制器类使用自定义控件。

现在我的问题是,当我尝试使用custom control properties时,我应该如何处理controller classes

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

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

欢迎改进(优点和缺点)或更好的架构方法的想法!

1 个答案:

答案 0 :(得分:1)

NotesIn9上有很多关于使用控制器类的节目。可能有一些感兴趣的例子。但要回答你的问题,这完全取决于你。自定义控件可以很容易地进入控制器,但它不是独立的&#34;然而,正如你所说,因为你使用的控制器不是我认为的问题,因为你可以假设控制器将拥有支持自定义控件所需的代码。根据自定义控件,您的控制器可以扩展其他内置自定义控件支持的控制器。然后它就会发挥作用。 但是如果你想通过compositeData传递值,你可以。只需创建一个自定义属性并将类型设置为&#34; java.lang.Object&#34;。然后你可以传递任何你想要的东西。 根据控制,我个人倾向于依赖于控制器。