2011-08-01 2 views
0

나는 ajax 용 jquery 플러그인 (3.0.0)을 사용하여 struts2 (2.2.3) 웹 응용 프로그램을 만들고 있습니다.url에서 최근 선택된 값을 매개 변수로 보내는 방법은 무엇입니까?

나는 2 개의 sj : autocompleter (공급자를위한 첫 번째 제품과 두 번째 제품)를 가진 jsp를 가지고있다. 내가 선택한 공급자에 의해 제품을 필터링해야합니다. 이 특정 응용 프로그램에서 두 번째 컬렉션에 대한 자동 완성 기능이 있어야합니다.

내가 원하는 것은 첫 번째 자동 완성기에서 선택한 값을 매개 변수로 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}"는 세션의 값을 가리키고 있습니다 인식.

질문 : "purchaseProviderId"autocompleter에서 최근에 선택한 값을 URL을 매개 변수로 보내려면 어떻게해야합니까?

미리 감사드립니다.

답변

0

Struts2-jQuery documentation에서 이중 선택을 사용하는 예를 참조하십시오.

두 번째 선택에는 formIds="formSelectReload"이 있습니다. 이것은 formSelectReload의 값에 의존하는 두 번째 선택을 채우기 위해 호출 된 작업/URL을 알려줍니다. 당신이 페이지를 JSP에서 언급 코드 아래에 추가

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

답장을 보내 주셔서 감사합니다. 당신 말이 맞았어요, 나는 두 번째 자동 완성기에 formIds를 추가했고 "purchase.provider.id"가 액션으로 보내졌습니다. 유일한 것은 제공자의 ID가 최근에 선택되지 않았으며, 대신이 구매를 위해 이미 선택/저장 된 제공자의 ID이며 새 ID를 선택해야합니다. 이 경우에는 실제로 자동 완성 구성 요소를 사용해야합니다.새 공급자 ID가 선택한 작업으로 보내는 다른 제안 사항은 무엇입니까? 자바 스크립트에서 그 id를 가져 와서 url의 param으로 보낼 수 있습니까? – clanmilano

+0

첫 번째 선택 목록에'onChangeTopics = "providerChanged"를 추가하십시오. – nmc

0

: 귀하의 경우

, 당신은 같은 것을 할 수도 있습니다.

<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 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 plugin 3.6.1에서 작동합니다.

도움이 필요하시면 알려 주시기 바랍니다. -Regards

관련 문제