WW-1975 Autocompleter w/loadMinimumCount ask for data on loading page

* Add "preload" attribute, which default to true (like in the div tag), which will prevent the autocompleter from loading its options when page is loaded

git-svn-id: https://svn.apache.org/repos/asf/struts/struts2/trunk@545001 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Musachy Barroso
2007-06-07 00:04:23 +00:00
parent a1d61f7b73
commit 393ad06f40
8 changed files with 29 additions and 4 deletions
@@ -252,6 +252,7 @@ public class Autocompleter extends ComboBox {
protected String valueNotifyTopics;
protected String resultsLimit;
protected String transport;
protected String preload;
public Autocompleter(ValueStack stack, HttpServletRequest request,
HttpServletResponse response) {
@@ -324,6 +325,8 @@ public class Autocompleter extends ComboBox {
}
if (transport != null)
addParameter("transport", findString(transport));
if (preload != null)
addParameter("preload", findValue(preload, Boolean.class));
String keyNameExpr = "%{" + keyName + "}";
addParameter("key", findString(keyNameExpr));
@@ -516,4 +519,9 @@ public class Autocompleter extends ComboBox {
public void setTransport(String transport) {
this.transport = transport;
}
@StrutsTagAttribute(description="Load options when page is loaded", type="Boolean", defaultValue="true")
public void setPreload(String preload) {
this.preload = preload;
}
}
@@ -61,6 +61,7 @@ public class AutocompleterTag extends ComboBoxTag {
protected String valueNotifyTopics;
protected String resultsLimit;
protected String transport;
protected String preload;
public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
return new Autocompleter(stack, req, res);
@@ -96,6 +97,7 @@ public class AutocompleterTag extends ComboBoxTag {
autocompleter.setValueNotifyTopics(valueNotifyTopics);
autocompleter.setResultsLimit(resultsLimit);
autocompleter.setTransport(transport);
autocompleter.setPreload(preload);
}
public void setAutoComplete(String autoComplete) {
@@ -205,4 +207,8 @@ public class AutocompleterTag extends ComboBoxTag {
public void setTransport(String transport) {
this.transport = transport;
}
public void setPreload(String preload) {
this.preload = preload;
}
}
@@ -184,7 +184,7 @@ struts.widget.ComboBoxDataProvider = function(combobox, node){
};
if(!dojo.string.isBlank(this.cbox.dataUrl)){
if(!dojo.string.isBlank(this.cbox.dataUrl) && this.cbox.preload){
this.getData(this.cbox.dataUrl);
} else {
// check to see if we can populate the list from <option> elements
@@ -255,6 +255,9 @@ dojo.widget.defineWidget(
transport : "",
//load options when page loads
preload : true,
//from Dojo's ComboBox
showResultList: function() {
// Our dear friend IE doesnt take max-height so we need to calculate that on our own every time
@@ -14982,7 +14982,7 @@ this.data[i]=[_c79,_c79];
}
}
};
if(!dojo.string.isBlank(this.cbox.dataUrl)){
if(!dojo.string.isBlank(this.cbox.dataUrl)&&this.cbox.preload){
this.getData(this.cbox.dataUrl);
}else{
if((node)&&(node.nodeName.toLowerCase()=="select")){
@@ -15001,7 +15001,7 @@ this.setData(data);
}
}
};
dojo.widget.defineWidget("struts.widget.ComboBox",dojo.widget.ComboBox,{widgetType:"ComboBox",dropdownHeight:120,dropdownWidth:0,itemHeight:0,listenTopics:"",notifyTopics:"",notifyTopicsArray:null,beforeNotifyTopics:"",beforeNotifyTopicsArray:null,afterNotifyTopics:"",afterNotifyTopicsArray:null,errorNotifyTopics:"",errorNotifyTopicsArray:null,valueNotifyTopics:"",valueNotifyTopicsArray:null,indicator:"",formId:"",formFilter:"",dataProviderClass:"struts.widget.ComboBoxDataProvider",loadOnType:false,loadMinimum:3,initialValue:"",initialKey:"",visibleDownArrow:true,fadeTime:100,searchType:"STARTSTRING",dataFieldName:"",keyName:"",templateCssString:null,templateCssString:".dojoComboBoxOuter {\n\tborder: 0px !important;\n\tmargin: 0px !important;\n\tpadding: 0px !important;\n\tbackground: transparent !important;\n\twhite-space: nowrap !important;\n}\n\n.dojoComboBox {\n\tborder: 1px inset #afafaf;\n\tmargin: 0px;\n\tpadding: 0px;\n\tvertical-align: middle !important;\n\tfloat: none !important;\n\tposition: static !important;\n\tdisplay: inline;\n}\n\n/* the input box */\ninput.dojoComboBox {\n\tborder-right-width: 1px !important;\n\tmargin-right: 0px !important;\n\tpadding-right: 0px !important;\n}\n\n/* the down arrow */\nimg.dojoComboBox {\n\tborder-left-width: 0px !important;\n\tpadding-left: 0px !important;\n\tmargin-left: 0px !important;\n}\n\n/* IE vertical-alignment calculations can be off by +-1 but these margins are collapsed away */\n.dj_ie img.dojoComboBox {\n\tmargin-top: 1px;\n\tmargin-bottom: 1px;\n}\n\n/* the drop down */\n.dojoComboBoxOptions {\n\tfont-family: Verdana, Helvetica, Garamond, sans-serif;\n\t/* font-size: 0.7em; */\n\tbackground-color: white;\n\tborder: 1px solid #afafaf;\n\tposition: absolute;\n\tz-index: 1000;\n\toverflow: auto;\n\tcursor: default;\n}\n\n.dojoComboBoxItem {\n\tpadding-left: 2px;\n\tpadding-top: 2px;\n\tmargin: 0px;\n}\n\n.dojoComboBoxItemEven {\n\tbackground-color: #f4f4f4;\n}\n\n.dojoComboBoxItemOdd {\n\tbackground-color: white;\n}\n\n.dojoComboBoxItemHighlight {\n\tbackground-color: #63709A;\n\tcolor: white;\n}\n",templateCssPath:dojo.uri.dojoUri("struts/ComboBox.css"),searchLimit:30,transport:"",showResultList:function(){
dojo.widget.defineWidget("struts.widget.ComboBox",dojo.widget.ComboBox,{widgetType:"ComboBox",dropdownHeight:120,dropdownWidth:0,itemHeight:0,listenTopics:"",notifyTopics:"",notifyTopicsArray:null,beforeNotifyTopics:"",beforeNotifyTopicsArray:null,afterNotifyTopics:"",afterNotifyTopicsArray:null,errorNotifyTopics:"",errorNotifyTopicsArray:null,valueNotifyTopics:"",valueNotifyTopicsArray:null,indicator:"",formId:"",formFilter:"",dataProviderClass:"struts.widget.ComboBoxDataProvider",loadOnType:false,loadMinimum:3,initialValue:"",initialKey:"",visibleDownArrow:true,fadeTime:100,searchType:"STARTSTRING",dataFieldName:"",keyName:"",templateCssString:null,templateCssString:".dojoComboBoxOuter {\n\tborder: 0px !important;\n\tmargin: 0px !important;\n\tpadding: 0px !important;\n\tbackground: transparent !important;\n\twhite-space: nowrap !important;\n}\n\n.dojoComboBox {\n\tborder: 1px inset #afafaf;\n\tmargin: 0px;\n\tpadding: 0px;\n\tvertical-align: middle !important;\n\tfloat: none !important;\n\tposition: static !important;\n\tdisplay: inline;\n}\n\n/* the input box */\ninput.dojoComboBox {\n\tborder-right-width: 1px !important;\n\tmargin-right: 0px !important;\n\tpadding-right: 0px !important;\n}\n\n/* the down arrow */\nimg.dojoComboBox {\n\tborder-left-width: 0px !important;\n\tpadding-left: 0px !important;\n\tmargin-left: 0px !important;\n}\n\n/* IE vertical-alignment calculations can be off by +-1 but these margins are collapsed away */\n.dj_ie img.dojoComboBox {\n\tmargin-top: 1px;\n\tmargin-bottom: 1px;\n}\n\n/* the drop down */\n.dojoComboBoxOptions {\n\tfont-family: Verdana, Helvetica, Garamond, sans-serif;\n\t/* font-size: 0.7em; */\n\tbackground-color: white;\n\tborder: 1px solid #afafaf;\n\tposition: absolute;\n\tz-index: 1000;\n\toverflow: auto;\n\tcursor: default;\n}\n\n.dojoComboBoxItem {\n\tpadding-left: 2px;\n\tpadding-top: 2px;\n\tmargin: 0px;\n}\n\n.dojoComboBoxItemEven {\n\tbackground-color: #f4f4f4;\n}\n\n.dojoComboBoxItemOdd {\n\tbackground-color: white;\n}\n\n.dojoComboBoxItemHighlight {\n\tbackground-color: #63709A;\n\tcolor: white;\n}\n",templateCssPath:dojo.uri.dojoUri("struts/ComboBox.css"),searchLimit:30,transport:"",preload:true,showResultList:function(){
var _c80=this.optionsListNode.childNodes;
if(_c80.length){
this.optionsListNode.style.width=this.dropdownWidth===0?(dojo.html.getMarginBox(this.domNode).width-2)+"px":this.dropdownWidth+"px";
@@ -24312,7 +24312,7 @@ struts.widget.ComboBoxDataProvider = function(combobox, node){
};
if(!dojo.string.isBlank(this.cbox.dataUrl)){
if(!dojo.string.isBlank(this.cbox.dataUrl) && this.cbox.preload){
this.getData(this.cbox.dataUrl);
} else {
// check to see if we can populate the list from <option> elements
@@ -24383,6 +24383,9 @@ dojo.widget.defineWidget(
transport : "",
//load options when page loads
preload : true,
//from Dojo's ComboBox
showResultList: function() {
// Our dear friend IE doesnt take max-height so we need to calculate that on our own every time
@@ -110,6 +110,9 @@
<#if parameters.transport?if_exists != "">
transport="${parameters.transport?html}"<#rt/>
</#if>
<#if parameters.preload?exists>
preload="${parameters.preload?string?html}"<#rt/>
</#if>
<#include "/${parameters.templateDir}/simple/scripting-events.ftl" />
<#include "/${parameters.templateDir}/simple/common-attributes.ftl" />
<#if parameters.href?exists>
@@ -50,6 +50,7 @@ public class AutocompleterTest extends AbstractUITagTest {
tag.setValueNotifyTopics("l");
tag.setResultsLimit("2");
tag.setTransport("m");
tag.setPreload("true");
tag.doStartTag();
tag.doEndTag();
@@ -21,4 +21,5 @@
dataFieldName="k"
searchLimit="2"
transport="m"
preload="true"
/>