如何将最近在网址中选择的值作为参数发送?

时间:2011-08-01 12:29:57

标签: jquery struts2

我正在使用一个struts2(2.2.3)Web应用程序,使用jquery插件(3.0.0)进行ajax。

我有一个jsp,其中我有2个sj:autocompleter(第一个用于提供者,第二个用于产品)。我需要按所选提供商过滤产品。在这个特定的应用程序中必须有第二个集合的自动完成程序。

我想要的是在url中将第一个自动填充器中选择的值作为参数发送,以便我能够使用该选择来过滤第二个自动完成器。

我的jsp代码的一部分:

<s:url id="url_products" action="myAction" method="showProducts">
    <s:param name="providerSelected" value="%{purchase.provider.id}"></s:param>
</s:url>

<sj:autocompleter 
id="purchaseProviderId" 
name="purchaseProvider" 
value="%{purchaseProvider}" 
onCompleteTopics="providerChanged"
cssClass="product" 
href="%{url_providers}" 
/>

<sj:autocompleter 
id="productId" 
name="productDescription" 
value="%{productDescription}" 
listenTopics="providerChanged"
href="%{url_products}" 
/>

我遇到的问题是“%{purchase.provider.id}”是在发送url_products之前准确选择的,当我通过url发送值时,值不会从最新的选择中更新。 我认为这个值是会话的一部分,并且由于为提供者​​完成的新选择尚未提交给操作,“%{purchase.provider.id}”只是指向会话知道的值的。

问题:如何通过url作为参数发送“purchaseProviderId”autocompleter中最近选择的值?

提前致谢!

2 个答案:

答案 0 :(得分:0)

请参阅在Struts2-jQuery documentation使用双重选择的示例。

请注意,第二个选择有formIds="formSelectReload"。这告诉调用的action / url填充第二个选择它取决于formSelectReload中的值。

在您的情况下,您可能会遇到以下情况:

<s:form id='myForm'>
<sj:autocompleter 
id="purchaseProviderId" 
name="purchaseProvider" 
value="%{purchaseProvider}" 
onCompleteTopics="providerChanged"
cssClass="product" 
href="%{url_providers}" 
/>

<sj:autocompleter 
id="productId" 
name="productDescription" 
formIds="myForm"   <!-- This will send form values to action including selected purchaseProviderId -->
value="%{productDescription}" 
listenTopics="providerChanged"
href="%{url_products}" 
/>
</s:form>

答案 1 :(得分:0)

在jsp页面中添加以下提及的代码。

<sj:autocompleter 
    id="purchaseProviderId" name="purchaseProvider" 
    onSelectTopics="providerChanged"
    list="productMap"
    //Fill this map with the key value pair, and also make the getter 
    //and setter in order to have the access of the variable in jsp page
    cssClass="product"/>

<s:url id="provider" action="getProvider"/>
<sj:autocompleter 
    id="productId" name="productDescription" 
    listenTopics="providerChanged"
    listKey="key" listValue="value"
    href="%{provider}" />

<script type="text/javascript">     
var key;
$.subscribe('providerChanged', function(event, data) 
{
  var ui = event.originalEvent.ui;
  key    = ui.item.key;

  //clear the children autocompleters
  jQuery('#productId').val("");
  jQuery('#productId_widget').val("");

  var options_branchCity_widget             = {};
  options_productId_widget.hiddenid         = "productId";
  options_productId_widget.delay            = 50;
  options_productId_widget.minimum          = 3;
  options_productId_widget.selectBox        = false;
  options_productId_widget.forceValidOption = true;
  options_productId_widget.jqueryaction     = "autocompleter";
  options_productId_widget.id               = "productId_widget";
  options_productId_widget.name             = "productDescription_widget";
  options_productId_widget.href             = "getProvider.action"+"?providerSelected="+key;
  options_productId_widget.listentopics     = "providerChanged";

  jQuery.struts2_jquery_ui.bind(jQuery('#productId_widget'),options_productId_widget); 
});
</script>

在struts.xml文件中添加以下代码,以注册将获取自动完成程序数据的受尊重操作。

<action name="getProvider" class="com.sample" method="getProvider">
    <result type="json">
        <param name="root">providerList</param>
    </result> 
</action>

如下所述创建DTO类。

public class autocompleteDTO 
{
private String key;
private String value;

public autocompleteDTO(String key, String value) 
{
    this.key = key;
    this.value = value;
}

public String getKey() 
{
    return key;
}
public void setKey(String key) 
{
    this.key = key;
}

public String getValue() 
{
    return value;
}
public void setValue(String value) 
{
    this.value = value;
}
}

在您的操作类中添加以下提及的代码以使用自动完成程序。

public String getProvider()
{
   String userTypeCharacter = request.getParameter("term");
   String providerSelected  = request.getParameter("providerSelected");

   List providerListDB = //fetch list from the database with respect to user typed character
   //and providerSelected.       

   //Create the array list of the DTO class
   providerList= new ArrayList<autocompleteDTO>();

  //providerList will be the member variable of the action along with the getter and setter,
  //for data display in the jsp page

   //Iterate the list and add the data to another list
   for (Object provider: providerListDB ) 
   {
       Provider providerData = (Provider) provider;

       String providerCode = providerData .getProviderCode();
       String providerName = providerData .getProviderName();

       providerList.add(new autocompleteDTO(providerCode , providerName ));
   }
 }
 return SUCCESS;
}

此代码适用于struts 2和struts 2 jquery插件3.6.1。

如果您有任何帮助,请告诉我。 -Regards