我正在使用一个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中最近选择的值?
提前致谢!
答案 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