All, I am green horn in Struts 2 and need help with struts.xml. I got the following error when try this URL :
localhost:8080/IteratorKFC/menu or localhost:8080/IteratorKFC/menu.action . what is wrong ? Incorrect configuration or incorrect URL ? Struts has detected an unhandled exception: There is no Action mapped for namespace / and action name menu. - [unknown location] com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:1 89) org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:61) org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsAct ionProxyFactory.java:39) com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultA ctionProxyFactory.java:58) org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:488) org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.jav a:434) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application FilterChain.java:243) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh ain.java:210) org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.ja va:240) org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.ja va:164) org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase .java:462) org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164 ) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100 ) org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563) org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java :118) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:403) org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:301) org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http 11Protocol.java:162) org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http 11Protocol.java:140) org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java: 309) java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) java.lang.Thread.run(Unknown Source) Strut.xml source ======================================== <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <!-- Configuration for the default package. --> <!-- <constant name="struts.action.extension" value=""/> --> <constant name="struts.devMode" value="true" /> <package name="IteratorKFC" namespace="/IteratorKFC" extends="struts-default"> <action name="menu" class="iteratorkfc.IteratorKFCAction" method="execute"> <result name="success">pages/iteratorkfc.jsp</result> </action> </package> </struts> ItertorKFCAction java ========================================== package iteratorkfc; import java.util.*; import com.opensymphony.xwork2.ActionSupport; public class IteratorKFCAction extends ActionSupport{ private List<String> comboMeals; public List<String> getComboMeals() { return comboMeals; } public void setComboMeals(List<String> comboMeals) { this.comboMeals = comboMeals; } @Override public String execute() { comboMeals = new ArrayList<String>(); comboMeals.add("Snack Plate"); comboMeals.add("Dinner Plate"); comboMeals.add("Colonel Chicken Rice Combo"); comboMeals.add("Colonel Burger"); comboMeals.add("O.R. Fillet Burger"); comboMeals.add("Zinger Burger"); return SUCCESS; } } Jsp ============================================ <%@ page contentType="text/html; charset=UTF-8" %> <%@ taglib prefix="s" uri="/struts-tags" %> <html> <head> <title><s:text name="Struts2 Iterator "/></title> </head> <body> <h1>Struts 2 Iterator tag example</h1> <h3>Simple Iterator</h3> <ol> <s:iterator value="comboMeals"> <li><s:property /></li> </s:iterator> </ol> <h3>Iterator with IteratorStatus</h3> <table> <s:iterator value="comboMeals" status="comboMealsStatus"> <tr> <s:if test="#comboMealsStatus.even == true"> <td style="background: #CCCCCC"><s:property/></td> </s:if> <s:elseif test="#comboMealsStatus.first == true"> <td><s:property/> (This is first value) </td> </s:elseif> <s:else> <td><s:property/></td> </s:else> </tr> </s:iterator> </table> </body> </html> Thank you for your help and advices. Tri Quan