為Backingbean建立基類

來源:互聯網
上載者:User

 

在Oracle ADF中,經常會使用Backing Scope的ManagedBean,也就是通常所描述的Backingbean,而在這些Backingbean中,有一些操作在很多頁面中會被反覆重用,例如:

1)根據屬性名稱從當前頁面的綁定中取值

2)向指定的當前頁面綁定的屬性中設值

3)尋找AM中發布成為Client Interface的方法的OperationBinding

4)解析EL運算式

5)其他

既然有了重用,那麼我們就可以建立Backingbean的基類,將這些可重用方法抽象到該類,在Oracle ADF的Best Practise中,恰好建議我們這樣去做。

在HADF架構的設計與實現的過程時,我們就設計了這樣的一個基類,所有基於HADF架構開發的Backingbean都繼承於該類,其代碼如下:

/**<br /> * @(#)CustomManagedBean.java<br /> *<br /> * HAND Enterprise Solution Company.<br /> * All rights reserved<br /> *<br /> */<br />package hand.hadf.common.view.backing;</p><p>import hand.hadf.common.view.HadfException;</p><p>import javax.el.ELContext;<br />import javax.el.ExpressionFactory;<br />import javax.el.ValueExpression;</p><p>import javax.faces.application.Application;<br />import javax.faces.context.FacesContext;</p><p>import oracle.adf.model.binding.DCBindingContainer;</p><p>import oracle.adf.model.binding.DCIteratorBinding;</p><p>import oracle.binding.AttributeBinding;<br />import oracle.binding.BindingContainer;<br />import oracle.binding.ControlBinding;<br />import oracle.binding.OperationBinding;</p><p>/**<br /> * 所有基於HADF架構進行的應用開發的BackingBean的基類,即所有客戶化開發建立的BackingBean均繼承於該類,<br /> * 同時要求所有子類實現Serializable介面<br /> * @author Eleven.Xu Nov.26th, 2009<br /> * @version 1.0.0.0<br /> */<br />public class CustomManagedBean {</p><p> /**<br /> * 預設的構造器<br /> */<br /> public CustomManagedBean() {<br /> }</p><p> /**<br /> * 解析EL運算式,並返回匹配對象或建立出相應對象<br /> * @param expression 待解析的EL運算式<br /> * @return 匹配的受管對象<br /> */<br /> public Object resolveExpression(String expression) {<br /> FacesContext facesContext = getFacesContext();<br /> Application app = facesContext.getApplication();<br /> ExpressionFactory elFactory = app.getExpressionFactory();<br /> ELContext elContext = facesContext.getELContext();<br /> ValueExpression valueExp =<br /> elFactory.createValueExpression(elContext, expression, Object.class);<br /> return valueExp.getValue(elContext);<br /> }</p><p> /**<br /> * 擷取當前FacesContext對象<br /> */<br /> public FacesContext getFacesContext() {<br /> return FacesContext.getCurrentInstance();<br /> }</p><p> /**<br /> * 擷取當前頁面的BindingContainer對象<br /> * @return 當前頁面的BindingContainer對象<br /> */<br /> public BindingContainer getBindingContainer() {<br /> return (BindingContainer)resolveExpression("#{bindings}");<br /> }</p><p> /**<br /> * 擷取當前頁面對應的DCBindingContainer<br /> * @return 當前頁面對應的DCBindingContainer<br /> */<br /> public DCBindingContainer getDCBindingContainer() {<br /> return (DCBindingContainer)getBindingContainer();<br /> }</p><p> /**<br /> * 在當前的DCBindingContainer中擷取OperationBinding<br /> * @param name 待擷取的OperationBinding名稱<br /> * @return OperationBinding對象<br /> */<br /> public OperationBinding findOperation(String name) {<br /> OperationBinding operationBinding =<br /> getDCBindingContainer().getOperationBinding(name);<br /> if (operationBinding == null) {<br /> throw new HadfException("Operation '" + name + "' not found");<br /> }<br /> return operationBinding;<br /> }</p><p> /**<br /> * 在當前BindingContainer中尋找Iterator Binding<br /> * @param iteratorName Iterator名稱<br /> * @return Iterator Binding<br /> */<br /> public DCIteratorBinding findIterator(String iteratorName) {<br /> DCIteratorBinding iter =<br /> getDCBindingContainer().findIteratorBinding(iteratorName);<br /> if (iter == null) {<br /> throw new HadfException("Iterator '" + iteratorName + "' not found");<br /> }<br /> return iter;<br /> }</p><p> /**<br /> * 擷取當前頁面繫結檔案中指定屬性的綁定值<br /> * @param attributeName 屬性名稱<br /> * @return 該屬性的值<br /> */<br /> public Object getBoundAttributeValue(String attributeName) {<br /> return findControlBinding(attributeName).getInputValue();<br /> }</p><p> /**<br /> * 為當前頁面綁定中的指定屬性設值<br /> * @param attributeName 屬性名稱<br /> * @param value 屬性值<br /> */<br /> public void setBoundAttributeValue(String attributeName, Object value) {<br /> findControlBinding(attributeName).setInputValue(value);<br /> }</p><p> /**<br /> * 根據屬性名稱尋找該屬性對應的綁定<br /> * @param attributeName 屬性名稱<br /> * @return 屬性綁定<br /> */<br /> public AttributeBinding findControlBinding(String attributeName) {<br /> return findControlBinding(getBindingContainer(), attributeName);<br /> }</p><p> private AttributeBinding findControlBinding(BindingContainer bindingContainer,<br /> String attributeName) {<br /> if (attributeName != null) {<br /> if (bindingContainer != null) {<br /> ControlBinding ctrlBinding =<br /> bindingContainer.getControlBinding(attributeName);<br /> if (ctrlBinding instanceof AttributeBinding) {<br /> return (AttributeBinding)ctrlBinding;<br /> }<br /> }<br /> }<br /> return null;<br /> }<br />} 

使用這樣的一個Backingbean的基類,可以大大簡化應用的開發,另外,隨著應用開發經驗的積累和實際需求,也可不斷擴充該基類:)

 

本文轉自Oracle Seeker:http://oracleseeker.com/2009/12/30/adf_hadf_backingbean_baseclass/

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.