Struts2自动补全器-单击提交按钮时条目丢失

Struts2 Autocompleter - Entry lost when submit-button is clicked

本文关键字:按钮 提交 单击 Struts2      更新时间:2023-09-26

我使用:

http://struts.apache.org/release/2.1.x/docs/autocompleter.html

问题是:

键入时:

"球"

自动完成找到"气球"

在文本字段中,我看到"Balloon",在下面的列表中,我也看到"Balloo"。当我点击监视器上的其他位置时,它会在文本字段中显示"气球"。但当我点击提交时,我会从文本字段中读取"球"。为什么?如何?

问候,Rhodarus

首先,不要再使用StrutsAjax标记,因为:

Dojo插件已弃用

Dojo插件将在Struts2.1 上弃用

如果您现在开始,您可以使用原始Dojo(现在是1.10版本,而不是Struts2附带的旧的、有缺陷的0.4.x版本);但迁移到jQuery可能会更容易,尤其是在Struts2-jQuery插件的帮助下。

您可以在Widgets菜单下看到其自动补全器的示例。

顺便说一句,如果出于某种原因,你想坚持使用旧的集成Dojo版本(例如,在处理一个巨大的遗留项目时,只进行最小的更正),请确保正确使用它:返回一个有效的Json对象,发布和订阅正确的主题,等等,如文档中的示例所示:

 <sx:autocompleter name="autocompleter1" href="%{jsonList}"/>

 <s:autocompleter name="test"  list="{'apple','banana','grape','pear'}" autoComplete="false"/>
 <sx:autocompleter name="mvc" href="%{jsonList}" loadOnTextChange="true" loadMinimumCount="3"/>

在自动补全器上输入的文本作为参数传递到"href"中指定的url,如(文本为"struts"):http://host/example/myaction.do?mvc=struts

<form id="selectForm">
      <sx:autocompleter  name="select" list="{'fruits','colors'}"  valueNotifyTopics="/changed" />
 </form>  
 <sx:autocompleter  href="%{jsonList}" formId="selectForm" listenTopics="/changed"/>

 <sx:autocompleter  href="%{jsonList}" id="auto"/>
 <script type="text/javascript">
   function getValues() {
      var autoCompleter = dojo.widget.byId("auto");
      //key (in the states example above, "AL")
      var key = autoCompleter.getSelectedKey();
      alert(key);
      //value (in the states example above, "Alabama")
      var value = autoCompleter.getSelectedValue();
      alert(value);
      //text currently on the textbox (anything the user typed)
      var text = autoCompleter.getText();
      alert(text);
   }
   function setValues() {
      var autoCompleter = dojo.widget.byId("auto");
      //key (key will be set to "AL" and value to "Alabama")
      autoCompleter.setSelectedKey("AL");
      //value (key will be set to "AL" and value to "Alabama")
      autoCompleter.setAllValues("AL", "Alabama");
   }
 </script>

 <script type="text/javascript">
 dojo.event.topic.subscribe("/before", function(event, widget){
     alert('inside a topic event. before request');
     //event: set event.cancel = true, to cancel request
     //widget: widget that published the topic
 });
 </script>         
 <sx:autocompleter beforeNotifyTopics="/before" href="%{#ajaxTest} />

 <script type="text/javascript">
 dojo.event.topic.subscribe("/after", function(data, request, widget){
     alert('inside a topic event. after request');
     //data : JavaScript object from parsing response
     //request: XMLHttpRequest object
     //widget: widget that published the topic
 });
 </script>        
 <sx:autocompleter afterNotifyTopics="/after" href="%{#ajaxTest}" />

 <script type="text/javascript">
 dojo.event.topic.subscribe("/error", function(error, request, widget){
     alert('inside a topic event. on error');
     //error : error object (error.message has the error message)
     //request: XMLHttpRequest object
     //widget: widget that published the topic
 });
 </script>
 <sx:autocompleter errorNotifyTopics="/error" href="%{#ajaxTest}" />

 <script type="text/javascript">
 dojo.event.topic.subscribe("/value", function(value, key, text, widget){
     alert('inside a topic event. after value changed');
     //value : selected value (like "Florida" in example above)
     //key: selected key (like "FL" in example above)
     //text: text typed into textbox
     //widget: widget that published the topic
 });
 </script>   
 <sx:autocompleter valueNotifyTopics="/value" href="%{#ajaxTest}" />