2012-08-13 44 views
5

Tôi muốn thêm hành động động trong PlaceBar (bố cục ứng dụng extlib oneui).XPages mở rộng bố cục Oneui - Cách thêm hành động trên thanh công cụ động

Chúng tôi có một vài url được lưu trữ trong một số tài liệu cấu hình. Dựa trên những URL này, tôi muốn tạo nút Container có các nút Child cơ bản trong đó. Mỗi nút con sử dụng một URL từ danh sách. Làm thế nào tôi có thể tạo nút vùng chứa và thêm các nút con vào nó một cách linh hoạt? bất kỳ mã SSJS/Java/CSJS mẫu nào cho điều này?

Cảm ơn bạn ..

Trả lời

1

Cảm ơn bạn đã trả lời nhanh. Đây là thông tin rất hữu ích cho tôi.

Một cách khác tôi đã phát hiện dựa trên mã XSnippet và một số tương tác ngược lại. từ mã java trong xpage như sau:

var oneui = getComponent("applicationLayout1"); 
var uiConfig = oneui.getConfiguration(); 
var containerNode:com.ibm.xsp.extlib.tree.complex.ComplexContainerTreeNode = new com.ibm.xsp.extlib.tree.complex.ComplexContainerTreeNode(); 
containerNode.setLabel("Cluster Applications"); 

var docAppProfile = docColl.getFirstDocument(); 
while(docAppProfile != null) 
{ 
    var children:com.ibm.xsp.extlib.tree.complex.ComplexLeafTreeNode = new com.ibm.xsp.extlib.tree.complex.ComplexLeafTreeNode(); 
    children.setComponent(oneui); 
    children.setLabel(docAppProfile.getItemValueString("appTitle")); 
    children.setHref(docAppProfile.getItemValueString("appURL")); 
    children.setImage(docAppProfile.getItemValueString("appLogoThumb")); 
    containerNode.addChild(children); 

    children = null; 
    var tempDoc = docColl.getNextDocument(docAppProfile); 
    docAppProfile = null; 
    docAppProfile = tempDoc; 
} 
uiConfig.addPlaceBarAction(containerNode); 

Đây là mã mẫu. Chuyển đổi này là vào mã java và serialized để cải thiện hiệu suất và tải nó chỉ một lần trong ứng dụng.

Cảm ơn bạn một lần nữa để được trợ giúp.

4

Có một cái nhìn tại Lặp lại Node (xe:repeatTreeNode) được mô tả trong cuốn sách Thư viện mở rộng XPages trên trang 245.

Dưới đây là một ví dụ rất đơn giản (lấy trực tiếp từ các cuốn sách):

<xe:repeatTreeNode var="val"> 
    <xe:this.value> 
     <![CDATA[#{javascript:return [ 
     ["Home","home"], 
     ["Domino","domino"], 
     ["OneUI","oneui"] 
     ];}]]> 
    </xe:this.value> 
    <xe:this.children> 
     <xe:basicLeafNode> 
     <xe:this.submitValue><![CDATA[#{javascript:return val[1]}]]></xe:this.submitValue> 
     <xe:this.label><![CDATA[#{javascript:return val[0]}]]></xe:this.label> 
     </xe:basicLeafNode> 
    </xe:this.children> 
</xe:repeatTreeNode> 
0

Một điều bạn có thể làm là sử dụng PhaseListener để đưa các mục vào trong vùng chứa của bạn trước khi trả lời kết xuất. Sau đó, bạn có thể kiểm soát nó ở một nơi duy nhất cho tất cả các trang của bạn.

+0

Gọi một hàm SSJS trong ví dụ mỗi nhân sẽ làm quá cho tất cả các trang hoặc, theo khuyến cáo, đặt cách bố trí vào một điều khiển tùy chỉnh và sử dụng ở khắp mọi nơi. Nhưng một người nghe giai đoạn chắc chắn sẽ là một bài tập thú vị – stwissel

+0

Xin chào Toby, bạn có bất kỳ mã mẫu nào cho cách chèn các mục vào PhaseListener không? làm ơn cho tôi biết. Cảm ơn. –

+0

Tôi đã thêm mã làm câu trả lời. –

1

về cơ bản mã giống như bạn đã liệt kê ở trên, nhưng bằng Java. và sau đó mã nhỏ này trong file faces-config.xml

<lifecycle> 
    <phase-listener>com.company.app.phaselisteners.PlaceBarInjector</phase-listener> 
</lifecycle> 

package com.company.app.phaselisteners; 





public class PlaceBarInjector implements PhaseListener { 

     private static final long serialVersionUID = 1L; 

     public PhaseId getPhaseId() { 
     return PhaseId.RENDER_RESPONSE; 
    } 

    public void beforePhase(PhaseEvent event) { 
     UIComponent oneui = JSFUtil.findComponent("applicationLayout1"); 
    Configruation uiconfig = oneui.getConfiguration(); 
    ComplexContainerTreeNode containerNode = new ComplexContainerTreeNode(); 
    containerNode.setLabel("Cluster Applications"); 

    Document docAppProfile = docColl.getFirstDocument(); 
    while(docAppProfile != null) 
    { 
      ComplexLeafTreeNode children = new ComplexLeafTreeNode(); 
      children.setComponent(oneui); 
      children.setLabel(docAppProfile.getItemValueString("appTitle")); 
     children.setHref(docAppProfile.getItemValueString("appURL")); 
      children.setImage(docAppProfile.getItemValueString("appLogoThumb")); 
      containerNode.addChild(children); 

      Document tempDoc = docColl.getNextDocument(docAppProfile); 
      docAppProfile = tempDoc; 
    } 
    uiConfig.addPlaceBarAction(containerNode); 
    } 

    public void afterPhase(PhaseEvent event) { 
     System.out.println("END PHASE " + event.getPhaseId()); 
    } 

} 
Các vấn đề liên quan