OperaMasks控件精华

  • 格式:doc
  • 大小:124.50 KB
  • 文档页数:5

OperaMasks控件精华web.xml文件---AOM组件整体换肤<context-param><param-name>org.operamasks.faces.FORM_RICH</param-name><param-value>true</param-value></context-param><context-param><param-name>org.operamasks.faces.SKIN</param-name><param-value>aqua</param-value></context-param>faces-config.xml整体支持AJAX<application><default-render-kit-id>AJAX</default-render-kit-id></application><w:chooseSkin>OperaMasks提供了简便的换肤功能,ChooseSkin组件是一个下拉框,提供了多种皮肤让用户选择:default、vista、gray、aqua和aero,这些皮肤来自operamasks-skins.jar,如果用户想定义自己的一套皮肤,则只需要按照格式往operamasks-skins.jar里面增加一套就行了,chooseSkin组件不用作任何修改。

示例:ChooseSkin使用非常简单,如下代码,把w:chooseSkin放在w:form里面,然后加一个<ajax:action event="onchange"/>事件,意思是当下拉框的值改变时,用ajax的方法提交,改变当前的皮肤风格,其它的工作AOM引擎会自动完成,用户不用去额外的工作。

<f:view renderKitId="AJAX"><w:form><h:outputLabel value="Skin: " style="font-weight:bold"/><w:chooseSkin cookie="skin"><ajax:action event="onchange"/></w:chooseSkin></w:form></f:view><w:panelBox>会使<layout:panelGrid><w:dataGrid>等容器更美观将<w:panelBox>嵌套在这些组件的外面有圆角的效果。

<f:convertDateTime>可以将数据库的日期时间类型显示为自定义格式birth为Date类型<w:outputColumn header="出生日期" value="#{data.birth}" ><f:convertDateTime pattern="yyyy-MM-dd"/></w:outputColumn><w:dateField>为日期类型输入字段,<f:convertDateTime pattern="yyyy-M-d" />必须加<w:dateField value="#{mainManagedBean.addEmployee.birth}" format="Y-m-d" > <f:convertDateTime pattern="yyyy-M-d" /></w:dateField>AOM2.01、AOM是怎样“干掉” ViewState的,如果一个 <h:form>的 transient 属性设为 true(默认为false),AOM就会从 xhtml 页面中恢复组件树,而不再是通过 ViewState 进行。

(注:AOM开发团队已经将此建议提交给 JSF 2.0,即 JSR 314),实现起来很复杂,但说起来就这么简单,如果你有兴趣,可以研究一下org.operamasks.faces.facelets.FaceletViewHandlerHook.java 的源码请注意:我们是把 <w:form>声明成 transient=true的,将其设置成true就意味着告诉AOM:请不要保存 ViewState。

(同样,你也可以在web.xml中配置参数从而让全局的form都为transient=true比form优先)。

<context-param><param-name>javax.faces.STATE_SAVING_METHOD</param-name><param-value>server</param-value></context-param>指定viewstate保存的位置,client代表客户端,server代表服务端,默认是在客户端,保存在客户端,意味着客户端与服务器的每次交互都要传递 ViewState,保存在服务器端则对服务器的内存是个巨大的考验。

2、clientValidator 必须与clientValidate结合使用<w:form id="calc" clientValidate="true" transient="true"><layout:panelGrid columns="3"><h:outputLabel for="first" /><w:textField id="first"><ajax:clientValidator message="数值不能等于30">if(value == 30) return false;return true;</ajax:clientValidator></w:textField>3、弹出对话框需要设置globalAction="true",否则不能关闭<layout:window><ajax:updater url="/curd/detail.xhtml" globalAction="true" /></layout:window>4、菜单放在form中,否则有时会有异常:菜单中有图表(与服务器端进行交互,必须将组件放在一个form里面。

)<w:form><w:menuBar autoExpand="true"><w:menu label="通用定单管理"><w:commandMenuItem label="menuItem" id="menu1"></w:commandMenuItem></w:menu></w:menuBar></w:form>5、需要触发事件或提交的数据都需放在form中,否则不会触发时间和提交数据6、<w:panelBox>很重要,在<ajax:updater>有问题时起关键作用、globalAction="true"也很重要。

没加:7、<ajax:updater>只能跟新一层,第二层不能装载8、tree事件的监听:/** bind方式* import org.operamasks.faces.event.TreeEventListener;* 实现接口:implements TreeEventListener* 方法:* public void processEvent(TreeEvent event) throws AbortProcessingException* public void processEvent(TreeEvent event) throws AbortProcessingException*{* response = "节点名称:"+event.getAffectedNode().getText()+",节点数据:"+event.getAffectedNode().getUserData()+",事件类型:"+event.getEventType();*}* 页面指明监测的事件:<w:treeEventListener binding="#{tree.TreeBean}" dblClick="true" click="false" collapse="true" expand="true"select="true"/>*//** annotation方式* import org.operamasks.faces.annotation.TreeEventListener;* 方法指明监测的事件:* @TreeEventListener(id = "tree", events ="select,expand,collapse,dblclick,check,checkStateChanged") * public void processEvent(TreeEvent event) throws AbortProcessingException* {* response = "节点名称:"+event.getAffectedNode().getText()+",节点数据:"+event.getAffectedNode().getUserData()+",事件类型:"+event.getEventType();* }* 页面:<w:treeEventListener id="processEvent"/>*/9、editdatagrid重要属性/** 绑定EditDataGrid数据行对应的Class*/@Bind(id = "grid", attribute = "bindBean")public Object getBindBean(){// 如果返回字符串指定绑定类,采用无参数构造函数,优先// 如果返回类则查找类的createBean(可以做些额外初始化工作)方法返回的类// return "curd.Booking1";//类全路径return this;}public Booking1 createBean(){Booking1 book = new Booking1();return book;}9、在Apusic应用服务器上打开日志,可以修改 {apusic安装目录}/domains/{域目录}/config/logging.xml文件,加入以下配置:<logger name="org.operamasks.faces.view" level="FINER"/><logger name="org.operamasks.faces.iovc" level="FINER"/><logger name="org.operamasks.faces.lifecycle" level="FINER"/>10、标注在@Bind中不声明id,那以成员变量的名称作为组件的id(默认为value);如果成员变量的类型是ponent.UIComponent,那么,会将组件的binding 属性绑定到该成员变量如果在@Action中没有指定 id,那么,则以方法名称作为默认的组件id;在@Action中还可以设置 event。