Jquery 自动完成程序不提交表单值

Jquery 自动完成程序不提交表单值,jquery,struts2,Jquery,Struts2,我正在使用struts 2和jquery插件 我有一个jsp,在这里我定义了两个元素,一个select和一个autocompleter。 我需要筛选从以前选择的提供商中选择的产品: <s:form id='myForm'> <s:select list="providers" value="provider.id" listKey="id" name="provider.id"/> <sj:autocompleter id="productId" na

我正在使用struts 2和jquery插件

我有一个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" 
 />

问题在于,自动补全器在输入sj:select时没有提交最新选定的值。因此,当调用url_products时,provider.id的旧值将发送到操作

请注意,我在自动完成程序中添加了formid,但没有解决问题


有什么想法吗?

我没有在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";
}
公共列表getProviders(){ 返回此.providerService.getAllProviders(); } 公共字符串[]getAllProducts(){ //调用此方法时,provider.id具有旧值 List productsDescriptions=new ArrayList(); if(term!=null&&term.length()>0) { 列表产品=新的ArrayList(); products=this.productService.getAllProducts(); 用于(产品:产品){ 字符串descriptionProduct=product.getDescription(); if(StringUtils.contains(descriptionProduct.toLowerCase(),term.toLowerCase()) { productsDescriptions.add(描述产品); } } } 返回productsDescriptions.toArray(新字符串[productsDescriptions.size()]); } 公共字符串getProductDescription(字符串productDescription){ 返回此.productDescription; } public void setProductDescription(字符串productDescription){ this.productDescription=productDescription; } 公共字符串showProducts(){ 返回“展示产品”; } jsp上的URL:

<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>

所有产品

我最近一直在玩sj:autocompleter,遇到了一个非常类似的问题。我不确定这是否是我在后端胡闹造成的-我想自动完成以匹配最后键入的项目:

这个,那个,还有一些

我仍然想在“某物”上进行匹配,但不覆盖“这个和那个”以及“如果选择了“某物”—总之,要说到点子上,导致错误的不是我的拼接和切割,而是添加以下内容的简单修复:

forceValidOption="false"
到sj:autocompleter。默认情况下,如果忽略该值,则该值为true


试试看它是否适合您

添加jquery代码。它是自动生成的吗?你写了吗?它是自动生成的。这就是我在jsp中的所有代码,用于让自动完成器工作。因此,自动完成程序正确显示产品,并在键入时开始过滤,但我想按所选提供商过滤这些产品,并且在处理url\u产品时,最新的provider.id不会呈现到操作中。您能找到JS并粘贴它吗,如果人们能看到js代码的实际代码,也许他们能提供更多帮助。@clanmilano我在这里遇到了完全相同的问题。你解决了这个问题吗?