Hi.
I am upgrading from Struts 2.0.11 to 2.1.6, which mostly works as it
should thanks to the migration guide [1]. A couple of things elude me,
though:
1) I am not able to get fetch static files from dojo. They are supposed
to be in the classpath per default [2], but the
/struts/dojo/struts_dojo.js path only gives me a 404. These files are
in the struts2-dojo-plugin jar, and the jar is included in my War (under
WEB-INF/lib/)
2) I also get NullPointers in
com.opensymphony.xwork2.util.TextParseUtil.java (155) and
com.opensymphony.xwork2.util.LocalizedTextUtil.findText (318) when
accessing certain pages. It seems that it's unable to fetch the strings
in under WEB-INF/classes/my/app/package.properties
Best regards,
Henrik
[1]
http://cwiki.apache.org/S2WIKI/troubleshooting-guide-migrating-from-struts-20x-to-21x.html
[2] http://struts.apache.org/2.x/docs/configuration-files.html
<?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>
<package name="my.app" namespace="/my-app" extends="struts-default">
<interceptors>
<interceptor name="login" class="my.app.LoginInterceptor"/>
<!-- interceptor name="ssl" class="my.app.SSLInterceptor"/ -->
<interceptor-stack name="defaultLoginStack">
<!-- interceptor-ref name="ssl"/ -->
<!-- Our SSLInterceptor -->
<interceptor-ref name="servletConfig"/>
<interceptor-ref name="params"/>
<interceptor-ref name="login"/>
<!-- Our LoginInterceptor -->
<interceptor-ref name="prepare"/>
<interceptor-ref name="chain"/>
<interceptor-ref name="modelDriven"/>
<interceptor-ref name="fileUpload"/>
<interceptor-ref name="staticParams"/>
<interceptor-ref name="params"/>
<interceptor-ref name="conversionError"/>
<interceptor-ref name="validation"/>
<interceptor-ref name="workflow"/>
</interceptor-stack>
<interceptor-stack name="defaultInsecureStack">
<!-- interceptor-ref name="ssl"/ -->
<!-- Our SSLInterceptor -->
<interceptor-ref name="servletConfig"/>
<interceptor-ref name="params"/>
<interceptor-ref name="prepare"/>
<interceptor-ref name="chain"/>
<interceptor-ref name="modelDriven"/>
<interceptor-ref name="fileUpload"/>
<interceptor-ref name="staticParams"/>
<interceptor-ref name="params"/>
<interceptor-ref name="conversionError"/>
<interceptor-ref name="validation"/>
<interceptor-ref name="workflow"/>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="defaultLoginStack"/>
<global-results>
<result name="login">/my-app/Login.jsp</result>
<result name="login-success">/my-app/LoginSuccess.jsp</result>
</global-results>
<!-- we could have used the catchall (*) action here, but specify it
explicitly so that we can use defaultInsecureStack -->
<action name="Dummy" class="my.app.my-appSupport">
<result>/my-app/Dummy.jsp</result>
<interceptor-ref name="defaultInsecureStack"/>
</action>
<!-- action name="Login_*" method="{1}" class="my.app.Login">
<result type="redirect-action">AboutOTTO</result>
<result name="input">/my-app/Login.jsp</result>
</action -->
<action name="Login" class="my.app.Login">
<result>/my-app/Login.jsp</result>
<result name="input">/my-app/Login.jsp</result>
</action>
<action name="AboutOTTO" class="my.app.AboutOTTO">
<result>/my-app/AboutOTTO.jsp</result>
<interceptor-ref name="defaultInsecureStack"/>
</action>
<action name="Hellomy-app" class="my.app.Hellomy-app">
<result>/my-app/Hellomy-app.jsp</result>
<interceptor-ref name="defaultInsecureStack"/>
</action>
<action name="Welcome" class="my.app.Hellomy-app">
<result>/my-app/Welcome.jsp</result>
<interceptor-ref name="defaultInsecureStack"/>
</action>
<action name="Home" class="my.app.Home">
<result>/my-app/LoginSuccess.jsp</result>
</action>
<action name="Logout" class="my.app.Logout">
<result>/my-app/Logout.jsp</result>
</action>
<action name="ShowActivate" class="my.app.Activatemy-app">
<param name="activationCode">=${activationCode}</param>
<result>/my-app/activate.jsp</result>
<interceptor-ref name="defaultInsecureStack"/>
</action>
<action name="Activate" class="my.app.Activatemy-app" method="activate">
<result name="input" type="chain">ShowActivate</result>
<result name="success">/my-app/activate_success.jsp</result>
<interceptor-ref name="defaultInsecureStack"/>
</action>
<action name="Showmy-appSupport" class="my.app.my-appSupport">
<result>/my-app/my-app_support.jsp</result>
<result name="input">/my-app/my-app_support.jsp</result>
<interceptor-ref name="defaultInsecureStack"/>
</action>
<action name="my-appSupport" class="my.app.my-appSupport" method="doSend">
<result name="input" type="chain">Showmy-appSupport</result>
<result name="success" type="redirectAction">my-appComplete</result>
<interceptor-ref name="defaultInsecureStack"/>
</action>
<action name="my-appComplete" class="my.app.my-appSupport">
<result>/my-app/my-app_support_success.jsp</result>
<interceptor-ref name="defaultInsecureStack"/>
</action>
<action name="ShowRegister" class="my.app.Register">
<result>/my-app/Register.jsp</result>
<result name="input">/my-app/Register.jsp</result>
<interceptor-ref name="defaultInsecureStack"/>
</action>
<action name="Register" class="my.app.Register" method="register">
<result name="input" type="chain">ShowRegister</result>
<result name="success" type="redirectAction">RegisterComplete</result>
<interceptor-ref name="defaultInsecureStack"/>
</action>
<action name="RegisterComplete" class="my.app.Register" method="complete">
<result>/my-app/SuccessfullRegistration.jsp</result>
<interceptor-ref name="defaultInsecureStack"/>
</action>
<action name="ShowTrackingcodes" class="my.app.Trackingcodes">
<result>/my-app/Trackingcodes.jsp</result>
</action>
<action name="DeleteTrackingCode" class="my.app.Trackingcodes" method="doDelete">
<result name="success" type="redirectAction">ShowTrackingcodes</result>
<result name="error" type="redirectAction">ShowTrackingcodes</result>
</action>
<action name="AddCustomTrackingcode" class="my.app.Trackingcodes" method="add">
<result name="input" type="chain">ShowTrackingcodes</result>
<result name="success" type="redirectAction">ShowTrackingcodes</result>
</action>
<action name="ViewPlayerReport" class="my.app.my-appUserReports">
<result>/my-app/playerReport.jsp</result>
</action>
<action name="BannerURL" class="my.app.BannerURL">
<result>/my-app/BannerURL.jsp</result>
<result name="error" type="redirectAction">ShowTrackingcodes</result>
</action>
<!-- <action name="Withdraw*" class="my.app.withdraw.Withdraw">
<result>/my-app/withdraw{1}.jsp</result>
</action> -->
<action name="Withdraw" class="my.app.withdraw.Withdraw" method="showWithdraw">
<result>/my-app/withdraw.jsp</result>
</action>
<action name="Withdraw_show_validation" class="my.app.withdraw.Withdraw">
<result>/my-app/withdraw.jsp</result>
</action>
<action name="Withdraw_details" class="my.app.withdraw.Withdraw">
<result>/my-app/withdraw_details.jsp</result>
</action>
<action name="Withdraw_validate" class="my.app.withdraw.Withdraw" method="validateMethod">
<result name="success" type="redirectAction">Withdraw_details</result>
<result name="error" type="redirectAction">Withdraw_show_validation</result>
</action>
<action name="Withdraw_validate_attributes" class="my.app.withdraw.Withdraw" method="validateAttributes">
<result name="success">/my-app/withdraw_show_confirm.jsp</result>
<result name="error" type="redirectAction">Withdraw_details</result>
</action>
<action name="RequestWithdraw" class="my.app.withdraw.Withdraw" method="requestPayout">
<result>/my-app/withdraw_complete.jsp</result>
<result name="error" type="redirectAction">Withdraw_validate_attributes</result>
</action>
<action name="ShowTransactions" class="my.app.Transactions">
<result name="input">/my-app/view_transactions.jsp</result>
<result name="success">/my-app/view_transactions.jsp</result>
</action>
<action name="ShowCommissions" class="my.app.Commissions">
<result name="input">/my-app/view_commissions.jsp</result>
<result name="success">/my-app/view_commissions.jsp</result>
</action>
<action name="ShowCommissionTickets" class="my.app.CommissionTickets">
<result name="input">/my-app/view_commission_tickets.jsp</result>
<result name="success">/my-app/view_commission_tickets.jsp</result>
</action>
<action name="ShowWithdrawals" class="my.app.withdraw.Withdrawals">
<result name="input">/my-app/view_withdrawals.jsp</result>
<result name="success">/my-app/view_withdrawals.jsp</result>
</action>
<action name="ShowSettings" class="my.app.EditSettings">
<result>/my-app/edit_settings.jsp</result>
<result name="input">/my-app/edit_settings.jsp</result>
</action>
<action name="EditSettings" class="my.app.EditSettings" method="doEdit">
<result name="input" type="chain">ShowSettings</result>
<result name="success" type="redirectAction">EditComplete</result>
</action>
<action name="EditComplete" class="my.app.EditSettings">
<result name="success">/my-app/settings_changed.jsp</result>
</action>
<!-- Add your actions here -->
</package>
</struts>
<?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>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />
<constant name="struts.action.extension" value="action" />
<include file="my-app.xml"/>
<!-- Add packages here -->
</struts>
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="starter" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Struts 2 - Maven Archetype - Starter</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:applicationContext*.xml</param-value>
</context-param>
<!-- Filters -->
<filter>
<filter-name>action2-cleanup</filter-name>
<filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
</filter>
<filter>
<filter-name>sitemesh</filter-name>
<filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
</filter>
<filter>
<filter-name>action2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
<!--
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
-->
</filter>
<filter-mapping>
<filter-name>action2-cleanup</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>action2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>action2</filter-name>
<url-pattern>/struts/*</url-pattern>
</filter-mapping>
<!-- <filter-mapping>
<filter-name>action2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
-->
<!-- Listeners -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Servlets -->
<servlet>
<servlet-name>dwr</servlet-name>
<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet>
<servlet-name>jspSupportServlet</servlet-name>
<servlet-class>org.apache.struts2.views.JspSupportServlet</servlet-class>
<load-on-startup>5</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dwr</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>jcaptcha</servlet-name>
<servlet-class>my.app.captcha.ImageCaptchaServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jcaptcha</servlet-name>
<url-pattern>/my-app-jcaptcha</url-pattern>
</servlet-mapping>
<!-- Welcome file lists -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
For additional commands, e-mail: user-h...@struts.apache.org