[richfaces-issues] [JBoss JIRA] (RF-13306) Autocomplete: initialize value from DOM (was: ignored API call .setValue(''))
Brian Leathem (JIRA)
jira-events at lists.jboss.org
Mon Dec 2 19:02:06 EST 2013
[ https://issues.jboss.org/browse/RF-13306?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12928048#comment-12928048 ]
Brian Leathem commented on RF-13306:
------------------------------------
[~alixey] any luck with that pull request? We are ramping up our development efforts for a 4.3.5 release. It would be great to see this fix included if you can take the time to create the PR.
> Autocomplete: initialize value from DOM (was: ignored API call .setValue(''))
> -----------------------------------------------------------------------------
>
> Key: RF-13306
> URL: https://issues.jboss.org/browse/RF-13306
> Project: RichFaces
> Issue Type: Feature Request
> Security Level: Public(Everyone can see)
> Affects Versions: 4.3.4
> Reporter: alexey plotnikov
> Fix For: 4.3.5
>
>
> All described here https://community.jboss.org/thread/233973
> I have this autocomplete component:
> {code}
> <table>
> <tr>
> <td>
> <rich:autocomplete mode="ajax" autocompleteMethod="#{autocomplete.autocompleteProviders}"
> minChars="0" var="s" fetchValue="#{s.realName}" id="provider-suggestion"
> autofill="false"
> onselectitem="autocompleteChangeProvider(event.target)" style="display: inline;"
> layout="table" value="#{autocomplete.providerName}" >
> <a4j:queue requestDelay="500" ignoreDupResponses="true" />
> <h:column>
> <h:outputText style="display:none;" value="#{s.id}"/>
> <h:outputText style="display:none;" value="#{s.realName}"/>
> </h:column>
> <h:column>
> <h:outputText value="#{s.name}" escape="false"/>
> </h:column>
> </rich:autocomplete>
> </td>
> <td>
> <h:graphicImage value="/img/arrow.png" onclick="#{rich:component('provider-suggestion')}.setValue('');#{rich:component('provider-suggestion')}.showPopup();stopEvent(event);"
> alt=""/>
> <h:graphicImage value="/img/cancel.png"
> onclick="#{rich:component('provider-suggestion')}.hidePopup();#{rich:component('provider-suggestion')}.setValue('');autocompleteChangeProvider(null);"
> alt="#{messages['pages.clear']}" title="#{messages['pages.clear']}"/>
> <h:inputHidden id="filter-provider-id" value="#{autocomplete.providerId}"/>
> </td>
> </tr>
> </table>
> {code}
> as you can see, i don't use showButton="true", because i need another functionality, i need erase input text before show popup window.
> I use JavaScript function "autocompleteChangeProvider" for extract selected id.
> I use separate button(/img/cancel.png) for erase input text, as you can see this function just use Richfaces API.
>
> And a problem:
> if autocomplete.providerName not null and not empty(in rich:autocomplete) and user clicks on show button(/img/arrow.png) than input text not erasing, but i called #{rich:component('provider-suggestion')}.setValue('') !!!
>
> I think i found a solution
> AutocompleteBase.js has this code:
> {code}
> rf.ui.AutocompleteBase = function(componentId, selectId, fieldId, options) {
> // call constructor of parent class
> $super.constructor.call(this, componentId);
> this.selectId = selectId;
> this.fieldId = fieldId;
> this.options = $.extend({}, defaultOptions, options);
> this.namespace = this.namespace || "." + rf.Event.createNamespace(this.name, this.selectId);
> this.currentValue = "";
> this.tempValue = this.getValue();
> this.isChanged = this.tempValue.length != 0;
> bindEventHandlers.call(this);
> };
> {code}
> as you can see this.currentValue = "" so JS thinks that this.currentValue="" so currentValue equal new value("" - empty string), so nothing happens.
> i replace this code by this:
> {code}
> rf.ui.AutocompleteBase = function(componentId, selectId, fieldId, options) {
> // call constructor of parent class
> $super.constructor.call(this, componentId);
> this.selectId = selectId;
> this.fieldId = fieldId;
> this.options = $.extend({}, defaultOptions, options);
> this.namespace = this.namespace || "." + rf.Event.createNamespace(this.name, this.selectId);
> this.currentValue = $(rf.getDomElement(fieldId)).val();
> this.tempValue = this.getValue();
> this.isChanged = this.tempValue.length != 0;
> bindEventHandlers.call(this);
> };
> {code}
> and it works!
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the richfaces-issues
mailing list