2012-08-01 1 views
0

저는 struts2-jquery-plugin을 사용하고 있습니다. 일반적으로 내 양식에는 과목 수강생과 선택한 학교 과목에 따라 데이터베이스에서 채울 수있는 첫 번째 선택이 필요합니다. 두 번째 선택 항목을 업데이트하고 에 의해 데이터베이스에서 채울 필요가 있습니다. 해당 주제를 가르치는 교사.첫 번째 선택에서 선택한 옵션에 따라 두 번째 선택을 채우는 방법?

위 링크에서 샘플 코드를 찾았지만 어떻게 작동하는지 추측 할 수 없습니다. 그들은 그것을 설명하지 않습니다. http://struts2-jquery.appspot.com/home.action#.

JSON을 강제로 사용해야합니까? 내 설명에 도움이되는 설명이나 코드는 매우 감사 할 것입니다.

<label>First Select:</label> 
<sj:select id="firstSelect" name="firstSelect" onChangeTopics="firstSelectChanged" src="firstSelect.action"/> 
<label>Second Select:</label> 
<sj:select id="secondSelect" reloadTopics="firstSelectChanged" src="secondSelect.action" elementIds="firstSelect"/> 

업데이트 나는이 링크 http://struts.jgeppert.com/struts2-jquery-showcase/index.action를 (섹션 아약스 링크> AJAX 선택가) 관리 카드으로 this post에서 제안하지만이 오류 얻을 시도

:

Struts Problem Report 
Struts has detected an unhandled exception: 

Messages: •There is no Action mapped for namespace/and action name echo. 



-------------------------------------------------------------------------------- 

Stacktraces 
There is no Action mapped for namespace/and action name echo. - [unknown location] 
    com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:177) 
    org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:61) 
    org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39) 
    com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:47) 
    org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:458) 
    org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395) 
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
    org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
    org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 
    org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) 
    org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) 
    org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
    java.lang.Thread.run(Unknown Source) 

을 자바 액션 클래스 :

,451,515,
package test.action; 

import java.util.ArrayList; 
import java.util.List; 
import org.apache.struts2.convention.annotation.Action; 
import org.apache.struts2.convention.annotation.Actions; 
import org.apache.struts2.convention.annotation.ParentPackage; 
import org.apache.struts2.convention.annotation.Result; 

import com.opensymphony.xwork2.ActionSupport; 

@ParentPackage(value = "showcase") 
public class JsonSample extends ActionSupport { 

     private static final long serialVersionUID = -2223948287805083119L; 
     private List<String>  languageList; 
     private List<String>  reloadList; 
     private String    language; 

     @Actions({ 
     @Action(value = "/jsonsample", results = { 
      @Result(name = "success", type = "json") 
     }) 
     }) 
     public String execute() 
     { 


     languageList = new ArrayList<String>(); 

     languageList.add("Java"); 
     languageList.add("PHP"); 
     languageList.add("C#"); 

     reloadList = new ArrayList<String>(); 
     if (language != null && language.equalsIgnoreCase("Java")) 
     { 
      reloadList.add("Struts2"); 
      reloadList.add("MyFaces"); 
      reloadList.add("Tapestry"); 
     } 
     else if (language != null && language.equalsIgnoreCase("PHP")) 
     { 
      reloadList.add("CakePHP"); 
      reloadList.add("Symfony"); 
      reloadList.add("Zend"); 
     } 
     else if (language != null && language.equalsIgnoreCase("C#")) 
     { 
      reloadList.add("NStruts"); 
      reloadList.add("ProMesh.NET"); 
      reloadList.add("Websharp"); 
     } 

     return SUCCESS; 
     } 

     public String getJSON() 
     { 
     return execute(); 
     } 

     public List<String> getLanguageList() 
     { 
     return languageList; 
     } 

     public List<String> getReloadList() 
     { 
     return reloadList; 
     } 

     public void setLanguage(String language) 
     { 
     this.language = language; 
     } 

    public String getLanguage() { 
     return language; 
    } 

    public void setLanguageList(List<String> languageList) { 
     this.languageList = languageList; 
    } 

    public void setReloadList(List<String> reloadList) { 
     this.reloadList = reloadList; 
    } 

} 

JSP 페이지 :

내가 양식에서 "에코"=을 조치를 삭제
<s:form id="formSelectReload" action="echo" theme="simple" cssClass="yform"> 
     <fieldset> 
      <legend>AJAX Form</legend> 
      <div class="type-text"> 
       <label for="language">Language: </label> 
       <s:url id="remoteurl" action="jsonsample"/> 
       <sj:select 
        href="%{remoteurl}" 
        id="language" 
        onChangeTopics="reloadsecondlist" 
        name="language" 
        list="languageList" 
        listKey="myKey" 
        listValue="languageList" 
        emptyOption="true" 
        headerKey="-1" 
        headerValue="Please Select a Language" 
       /> 
      </div> 
      <div class="type-text"> 
       <label for="echo">Framework: </label> 
       <s:url id="remoteurl" action="jsonsample"/> 
       <sj:select 
        href="%{remoteurl}" 
        id="selectWithReloadTopic" 
        formIds="formSelectReload" 
        reloadTopics="reloadsecondlist" 
        name="echo" 
        list="reloadList" 
        emptyOption="true" 
        headerKey="-1" 
        headerValue="Please Select a Framework" 
       /> 
      </div> 
      <div class="type-button"> 
       <sj:submit 
        id="submitFormSelectReload" 
        targets="result" 
        value="AJAX Submit" 
        indicator="indicator" 
        button="true" 
        /> 
        <img id="indicator" 
         src="images/indicator.gif" 
         alt="Loading..." 
         style="display:none" 
        /> 
      </div> 
     </fieldset> 
    </s:form> 

, 나는 더 이상 오류가 없었지만 결과적으로 I는 그림에 표시 포함의 종류를 가지고 . Ajax Submit을 클릭했을 때 결과에서 선택된 옵션을 얻지 못하고 결과 div에 양식이 표시됩니다. 정말 고마워요.

enter image description here

+0

폼 코드와 'struts.xml'을 볼 수 없다면 무엇이 잘못되었는지 알기가 어렵습니다. – nmc

+0

고맙습니다. 나는 업데이트를 했으므로 폼과 Action 클래스를 추가했다. –

+0

원래의 질문과 관련되어 있지만 그 질문을 버리고 별도의 질문을 게시해야 할 수도 있습니다 ... 내가 게시 한 스크린 샷이 게시 한 코드와 어떻게 관련되는지 볼 수 없습니다. 그러나 게시 한 양식 코드는 양식에서 'echo'라는 작업을 호출해야하지만 게시 한 작업 클래스에는 해당 작업이 없음을 보여줍니다. 그래서 폼을 제출하면 스트럿츠는 액션을 찾을 수 없습니다! – nmc

답변