2011-08-31 66 views
1

我正在使用struts 2和jquery插件。autocompleter不提交表單值

我有一個jsp,我定義了兩個元素,一個select和一個autocompleter。 我需要過濾從之前選擇的提供者選擇的產品有:

<s:form id='myForm'> 
<s:select list="providers" value="provider.id" listKey="id" name="provider.id"/> 
<sj:autocompleter 
id="productId" 
name="productDescription" 
value="%{productDescription}" 
listenTopics="providerChanged" 
href="%{url_products}" 
formIds="myForm" 
/> 

的問題是,autocompleter不會在SJ提交的最新選擇的值:選擇,而在它打字。因此,當調用url_products時,會將provider.id的舊值發送到該操作。

請注意,我在自動完成器中添加了formIds,但沒有解決問題。

任何想法???

+0

爲您添加jQuery代碼。它是否自動生成我們有你寫的嗎? – Ali

+0

它是自動生成的。這就是我在jsp中讓自動完成工作的所有代碼。因此,自動完成程序正確顯示產品並在打字時正在對其進行過濾,但我希望通過所選提供程序過濾這些產品,並且在處理url_products時最新的provider.id不會呈現給操作。 – clanmilano

+0

你可以找到JS並粘貼它,也許人們可以幫助更多,如果他們可以看到實際的代碼js代碼。 – Ali

回答

0

我沒有JS添加任何代碼,所以我有相關的一些其他的代碼,可以更好地描述我所實現的:

代碼在行動:

public List<Provider> getProviders() { 
    return this.providerService.getAllProviders(); 
} 

public String[] getAllProducts() { 
      //provider.id has an old value when this methood is called 
    List<String> productsDescriptions = new ArrayList<String>(); 
    if (term != null && term.length() > 0) 
    { 
     List<Product> products = new ArrayList<Product>(); 
     products = this.productService.getAllProducts(); 
      for (Product product : products) { 
       String descriptionProduct =  product.getDescription(); 
       if (StringUtils.contains(descriptionProduct.toLowerCase(), term.toLowerCase())) 
       { 
         productsDescriptions.add(descriptionProduct); 
       } 
      } 
    } 
    return productsDescriptions.toArray(new String[productsDescriptions.size()]); 
} 

public String getProductDescription(String productDescription) { 
    return this.productDescription; 
} 

public void setProductDescription(String productDescription) { 
    this.productDescription = productDescription; 
} 

public String showProducts() { 
    return "showProducts"; 
} 

URL在JSP:

<s:url id="url_products" action="purchaseNavegation" method="showProducts"/> 

的struts.xml:

<action name="purchaseNavigation" class="purchaseNavigationAction"> 
     <result name="showProducts" type="json"> 
      <param name="root">allProducts</param> 
     </result> 
    </action> 
0

我最近玩過sj:autocompleter,並且有一個非常類似的問題。我不知道這是否是我的插科打諢在後端這樣做 - 我想autocompleter匹配上的最後一個項目正在鍵入:

這和和someth ..

我還是想匹配'的東西',但沒有覆蓋'這個和那個'如果'某事'被選中 - 無論如何,爲了達到這一點,這不是我的拼接和切塊造成的錯誤,這是一個簡單的修復添加:

forceValidOption="false" 

給sj:autocompleter。默認情況下,如果省略此值,則該值爲true。

嘗試一下,看看它是否適合你