Trong beforePageLoad hoặc afterPageLoad tạo một biến SSJS với một tham chiếu đến compositeData:
<xp:this.beforePageLoad>
<![CDATA[#{javascript:
var hlp=compositeData;
}]]>
</xp:this.beforePageLoad>
Điều này cho phép bạn truy cập vào PropertyMap trong giai đoạn Rendering. Nếu bạn có một tài sản kiểm tra bạn có thể sau đó acces nó theo cách này:
<xp:this.afterRenderResponse>
<![CDATA[#{javascript:
print(hlp.test);
}]]>
</xp:this.afterRenderResponse>
EDIT: này chỉ hoạt động nếu trang được mở ra (PageLoad). Nếu bạn làm mới trang, điều này sẽ không hoạt động. Nếu nó phải chạy với refreshs một phần, bạn phải làm điều này:
Trước tiên, bạn cần phải thêm một ID để điều khiển tùy chỉnh của bạn:
<xc:ccWithId test="I am your property" id="ccWithId" />
Điều này cho phép bạn truy cập vào điều khiển tùy chỉnh như một thường xuyên thành phần với getComponent(). Bây giờ bạn có thể truy cập vào propertyMap của các thành phần trong trường hợp điều khiển tùy chỉnh của mà giữ biến bạn muốn:
<xp:this.beforeRenderResponse>
<![CDATA[#{javascript:
var cmp:com.ibm.xsp.component.UIIncludeComposite = getComponent("ccWithId");
print("Value of 'test' -> " + cmp.getPropertyMap().getString("test"))
}]]>
</xp:this.beforeRenderResponse>
EDIT bởi xpages-Noob: Ví dụ từ trên cao hoạt động tốt đối với tài sản điều khiển tùy chỉnh tĩnh. Tuy nhiên, trong trường hợp một thuộc tính được tính toán, các hàm nhận được khác nhau của bản đồ thuộc tính trả về một đối tượng ràng buộc giá trị thay vì giá trị của chính nó. Do đó, người ta có thể sử dụng chức năng sau đây là một cách giải quyết:
var thisData:com.ibm.xsp.binding.PropertyMap=getComponent("ccWithId").getPropertyMap();
function getPara(key) {
var x=thisData.get(key);
if (@Ends(typeof(x),"ValueBinding")) return x.getValue(facesContext);
else return x
}
Nếu bạn muốn, ví dụ, có tài sản "test", gọi getPara ("test"). Giá trị trả về phải bằng compositeData.test.
Hãy thử tính toán beforeRenderResponse về "tải trang" để sử dụng $ thay vì # ( xp: this.beforeRenderResponse>) –
Khi tôi tính toán sự kiện tải trang, tôi gặp lỗi: "getComponent() is null". Dù sao, tính toán chỉ trên tải trang không thực sự là một lựa chọn trong trường hợp của tôi bởi vì tôi muốn làm mới một phần điều khiển tùy chỉnh khi các tham số của nó thay đổi. –
Dựa trên quan sát của tôi, điều này cũng xảy ra không chỉ cho compositeData mà còn cho currentDocument và các nguồn dữ liệu khác được định nghĩa trong xpage. – rfk