PDA

View Full Version : نحوه فراخوانی action ها در struts2



trustmiracle
شنبه 29 تیر 1392, 15:47 عصر
من دارم struts2 را یاد میگیرم. فایل struts.xml ام بصورت زیر هستش:



<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>

<constant name="struts.devMode" value="true" />
<constant name="struts.custom.i18n.resources" value="languages" />

<package name="default" namespace="/" extends="struts-default">

<!--
<default-action-ref name="index" />
-->

<global-results>
<result name="error">/error.jsp</result>
</global-results>

<global-exception-mappings>
<exception-mapping result="error" exception="java.lang.Exception"/>
<exception-mapping result="error" exception="ir.imrasta.esa.bll.exceptions.DataSourceException"/>
<exception-mapping result="error" exception="ir.imrasta.esa.bll.exceptions.DecryptionException"/>
</global-exception-mappings>

<action name="index">
<result>/index.jsp</result>
</action>

<action name="login" class="ir.imrasta.esa.ui.action.UserAction" method="login">
<result name="success">/protected/admin/list</result>
<result name="failed">/login.jsp?login=failed</result>
</action>



</package>

<package name="admin" namespace="protected/admin/" extends="default">

<action name="list" class="ir.imrasta.esa.ui.action.ManagerAction" method="list">
<result name="success">/protected/admin/list.jsp</result>
</action>

</package>

</struts>



من در فراخوانی اکشن login که در پکیج default هست مشکلی ندارم. ولی وقتی اکشن list را که در پکیج دوم هست فراخوانی می کنم خطای زیر را میده:



Struts Problem Report

Struts has detected an unhandled exception:
Messages: There is no Action mapped for namespace [/] and action name
[list] associated with context path [/ESA].

Stacktraces

There is no Action mapped for namespace [/] and action name
[list] associated with context path [/ESA]. - [unknown location] com.opensymphony.xwork2.DefaultActionProxy.prepare (DefaultActionProxy.java:185) org.apache.struts2.impl.StrutsActionProxy.prepare( StrutsActionProxy.java:63) org.apache.struts2.impl.StrutsActionProxyFactory.c reateActionProxy(StrutsActionProxyFactory.java:39) com.opensymphony.xwork2.DefaultActionProxyFactory. createActionProxy(DefaultActionProxyFactory.java:5 8) org.apache.struts2.dispatcher.Dispatcher.serviceAc tion(Dispatcher.java:553) org.apache.struts2.dispatcher.ng.ExecuteOperations .executeAction(ExecuteOperations.java:77) org.apache.struts2.dispatcher.ng.filter.StrutsPrep areAndExecuteFilter.doFilter(StrutsPrepareAndExecu teFilter.java:99) org.apache.catalina.core.ApplicationFilterChain.in ternalDoFilter(ApplicationFilterChain.java:235) org.apache.catalina.core.ApplicationFilterChain.do Filter(ApplicationFilterChain.java:206) org.apache.catalina.core.StandardWrapperValve.invo ke(StandardWrapperValve.java:233) org.apache.catalina.core.StandardContextValve.invo ke(StandardContextValve.java:191) org.apache.catalina.core.StandardHostValve.invoke( StandardHostValve.java:127) org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:103) org.apache.catalina.core.StandardEngineValve.invok e(StandardEngineValve.java:109) org.apache.catalina.connector.CoyoteAdapter.servic e(CoyoteAdapter.java:293) org.apache.coyote.http11.Http11Processor.process(H ttp11Processor.java:861) org.apache.coyote.http11.Http11Protocol$Http11Conn ectionHandler.process(Http11Protocol.java:606) org.apache.tomcat.util.net.JIoEndpoint$Worker.run( JIoEndpoint.java:489) java.lang.Thread.run(Unknown Source)


You are seeing this page because development mode is enabled. Development mode, or devMode, enables extra debugging behaviors and reports to assist developers. To disable this mode, set:
struts.devMode=false in your WEB-INF/classes/struts.properties file.




من بصورت زیر این اکشن را فراخوانی می کنم:

lhttp://localhost:8080/ESA/protected/admin/list?
آیا در نوشتن url اشتباه کردم؟

abtin021
دوشنبه 22 مهر 1392, 01:37 صبح
با سلام ابتدا یک صفحه jsp تعریف می کنی که دارای تگ فرم و اطلاعات ورودی و در تگ فرم action مورد نظرت رو می نویسی

<s:form method="POST" action="singup">
<input type="text" name="tb-Tel" style="width:150px ">
</s:form>

بعد هم یک کلاس می سازی برای اکشن کردن این کلاس مراحلی رو باید طی کنی:

1.در بخش تگ فرم jsp باید اسم اکشن رو بدی حتماً
2.از ActionSuppurt باید extends کنی
3.در اکشن یک متد از ActionSuppurt باید Override کنی که return کنه به اون اسمی که در فایل strust.xml دادی در قسمت result به این شکل:
<action name="singup" class="classes.Action.singup" method="execute">
<result name="singup">/FoodandBeverage/pages/Register.jsp</result>
</action>

حالا بعد از کلیک اکشن کار میکنه.

موفق باشی دوست من :چشمک: