2011-08-31 68 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。

尝试一下,看看它是否适合你