2015-09-14 98 views
3

當引用EL中的bean屬性(id)時,我使用#{bean.id}在SSJS中使用表達式語言

我現在有一個要求,用一些靜態文本前置這些數據。我通過使用SSJS來做到這一點:"sometext" + bean.getId();

有沒有一種方法可以在SSJS中使用EL符號?例如"sometext" + #{bean.id};

我意識到,在這個例子中它沒有太大的不同,但是當請求更復雜或嵌套的屬性時,我認爲它會有用。

回答

8

雖然理論上你可以在SSJS塊內部執行任意EL,但是值得做的事情太難看了(可能類似facesContext.getApplication().createValueBinding("#{bean.id}").getValue(facesContext))。

可以,但是,當你想要做什麼符合需求時,在相同的屬性混合綁定類型。例如:<xp:text value="#{javascript:doFoo()} some other text #{bean.id}"/>。這將適合你的問題的具體情況,但可能不適合實際需要。

適合其他情況的相關技術是使用加載時SSJS(或其他)綁定來生成運行時EL綁定。例如:<xp:fileDownload value="${javascript:'#{' + compositeData.dataSource + '.' + compositeData.fieldName + '}'}"/>。再次,這是情景,但可以是有用的。

+0

謝謝傑西。您在第二段中描述的技術完全適合這種情況,因爲前置文本是靜態的,所以我可以完全取消SSJS。 –

+1

在這種情況下,自定義語言非常好(略)最佳實踐。你只有一個組件,所以處理服務器端的代碼少,所以更好的性能(儘管最低限度)和更少的HTML傳遞給瀏覽器(因爲只有一個HTML元素)。 –