使用 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"。然后你可以传入任何你真正想要的东西。
根据控件的不同,我个人倾向于只依赖于控制器。
以后我想几乎只使用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"。然后你可以传入任何你真正想要的东西。 根据控件的不同,我个人倾向于只依赖于控制器。