什么"这"在primefaces组件中使用时

时间:2015-01-03 20:52:14

标签: jsf primefaces

我的xhtml文件中有一个autoComplete组件:

<p:autoComplete value="#{locationController.selectedLocation}"
        onblur="LocationEditor.AutoCompleteElementChanged('#{encryptedCategory}','#{encryptedAttribute}', this)"
        forceSelection="true"
        var="currentLocation" itemLabel="#{currentLocation.name}"
        itemValue="#{currentLocation}" converter="#{locationConverter}"
        queryDelay="400"
        completeMethod="#{locationController.autoCompleteLocation}"
        maxResults="10">
        <p:column>
            #{currentLocation.name}
        </p:column>
</p:autoComplete>

在我的javascript文件中,AutoCompleteElementChanged的定义如下:

AutoCompleteElementChanged: function(category, attribute, autoCompleteElement) {
    if (autoCompleteElement.value.length < 1)
        return;
    var value = autoCompleteElement.value;
    //do something
}

当我将this传递给我的javaScript方法AutoCompleteElementChanged时,其值autoCompleteElement.value)就是我在itemLabel中向p:autoComplete提供的内容。假设我有itemlLabel="#{currentLocation.id}",那么autoCompleteElement.value将是currentLocation的id。现在我有itemlLabel="#{currentLocation.name}",js函数在我使用autoCompleteElement.value时给出了currentLocation的名称。

我的问题究竟是什么this?它是指什么以及如何修改它,以便获得itemLabel的值而不是获得itemValue的值或其他属性?因为我在js函数中需要的是currentLocation的id而不是它的名字

PS:我尝试将currentLocation.id直接传递给我的javascript函数而不是this,但似乎在设置currentLocation之前调用了onblur,因此它给了我错误的id

1 个答案:

答案 0 :(得分:2)

this是自动填充组件生成的input的javascript对象。

有:

<p:autoComplete onblur="console.log(this)"></p:autoComplete>

将登录控制台:

<input id="j_idt26:j_idt34_input" 
       name="j_idt26:j_idt34_input"
       type="text"
       class="ui-autocomplete-input ui-inputfield ui-widget ui-state-default ui-corner-all" 
       autocomplete="off" onblur="console.log(this);" 
       role="textbox" aria-disabled="false"
       aria-readonly="false">

这就是为什么你要在输入中填写文字。


为了获得id而不是填充值,您可以使用PF JS对象提供的hinput

<p:autoComplete widgetVar="autoCompleteWV" 
                onblur="console.log(PF('autoCompleteWV').hinput.val())">
</p:autoComplete>

注意:应该实现转换器。