尝试在客户端javascript中使用自定义属性(通过compositeData),但它无效。
用户选择不同的值,因此会触发onChange事件。我能够获取我想要的字符串(refreshOnChangeID)并将其放入我的var y中。我发出警报,我得到正确的值(" fld4b")。
然后代码执行XSP.partialRefreshPost。如果我对该字段进行硬编码,那么我将获得部分刷新。
但是输入var(在注释掉的最后一行)并不起作用。 id解析为零。
我做错了什么?
$(document).ready(
function() {
var x = x$("#{javascript:return getComponent(compositeData.fieldName).getClientId(facesContext);}").select2({});
x.on('change', function(e) {
var y = "#{compositeData.refreshOnChangeID}";
alert(y);
XSP.partialRefreshPost("#{id:fld4b}", {
immediate: true
});
//XSP.partialRefreshPost('#{id:'+y+'}',{immediate: true});
})
});
我能够通过创建一个隐藏的计算字段来解决这个问题,该字段已解析为我想要刷新的字段的id:
<xp:text
escape="true"
id="refreshID"
value="${javascript:'#{id:'+compositeData.refreshOnChangeID+'}'}"
style="display:none">
</xp:text>
然后我能够抓住这个字段的值并在我的css中使用它:
$(document).ready(
function() {
var x = x$("#{javascript:return getComponent(compositeData.fieldName).getClientId(facesContext);}").select2({});
x.on('change', function(e) {
var t = "#{id:refreshID}";
var fldVal2 = document.getElementById(t).innerHTML;
XSP.partialRefreshPost(fldVal2, {
immediate: true
});
})
});
答案 0 :(得分:2)
使用值client ID + compositeData.fieldName创建Computed字段,然后在客户端java脚本函数中使用document.getElementById(“”)。innerHTML来获取compositeData值。
答案 1 :(得分:0)
如果这是在输出脚本控件中,则EL不在那里工作。试试var y = '#{javascript:compsiteData.get("refreshOnChangeID")}';