You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@struts.apache.org by "Musachy Barroso (JIRA)" <ji...@apache.org> on 2009/03/27 03:59:03 UTC

[jira] Resolved: (WW-3063) Codebehind plugin fails to locate SayHelloAction class

     [ https://issues.apache.org/struts/browse/WW-3063?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Musachy Barroso resolved WW-3063.
---------------------------------

    Resolution: Incomplete

Please ask on the mailing list, this is likely to be a configuration problem. your action should be mapped to /all/say-hello

> Codebehind plugin fails to locate SayHelloAction class
> ------------------------------------------------------
>
>                 Key: WW-3063
>                 URL: https://issues.apache.org/struts/browse/WW-3063
>             Project: Struts 2
>          Issue Type: Bug
>          Components: Plugin - CodeBehind
>    Affects Versions: 2.1.6
>         Environment: J2SE 1.6.0.14
> TC 1.6.014
> Struts 2.1.6
>            Reporter: Martin Gainty
>            Priority: Minor
>
> //WEB-INF/classes/struts.xml
> <?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>
>     <!-- Some or all of these can be flipped to true for debugging -->
>     <constant name="struts.i18n.reload" value="false" />
>     <constant name="struts.devMode" value="true" />
>     <constant name="struts.configuration.xml.reload" value="false" />
>     <constant name="struts.custom.i18n.resources" value="globalMessages" />
>     <constant name="struts.action.extension" value="action,," />
>     <constant name="struts.codebehind.defaultPackage" value="person" />
>     <!-- constant name="struts.freemarker.manager.classname" value="customFreemarkerManager" / -->
>     <constant name="struts.serve.static" value="true" />
>     <constant name="struts.serve.static.browserCache" value="false" />
>     <package name="sayHello" extends="struts-default" namespace="say-hello">
>    		<default-action-ref name="say-hello"/>	
>   		<action name="say-hello" class="actions.all.SayHelloAction" method="default">
>   			<result>/say-hello-success.jsp</result>
>   		</action>
>     </package>
> </struts>
> //here is the java code which extended ActionSupport but reworked to extend Servlet to make operational
> package actions.all;
> import com.opensymphony.xwork2.ActionSupport;
> import java.io.*;
> import javax.servlet.*;
> import javax.servlet.http.*;
> public class SayHelloAction extends HttpServlet
> {
>   private static final long serialVersionUID = 1L;
>   private java.lang.String userName;
>   public void doPost(HttpServletRequest req,HttpServletResponse resp) throws ServletException, IOException
>   {
> 	  userName=req.getParameter("userName");
> 	  if(userName==null) userName=(String)req.getAttribute("userName");
> 	  System.out.println("Inside SayHelloAction::doPost..");
> 	  doGet(req,resp);
>   }
>   public void doGet(HttpServletRequest req, HttpServletResponse res)
>                                throws ServletException, IOException
>   {
>     System.out.println("Inside SayHelloAction::doGet..");
>     res.setContentType("text/html");
>     PrintWriter out = res.getWriter();
>     String name = req.getParameter("UserName");
>     out.println("<HTML>");
>     out.println("<HEAD><TITLE>Hello, " + name + "</TITLE></HEAD>");
>     out.println("<BODY>");
>     out.println("Hello, " + userName);
>     out.println("</BODY></HTML>");
>   }
>   public String getServletInfo()
>   {
>     return "A servlet that knows the name of the person to whom it's" +  "saying hello";
>   }
>   public java.lang.String getUserName()
>   {
>          return userName;
>   }
>   public void setUserName(java.lang.String userName)
>   {
>          this.userName = userName;
>   }
> }
> //By default, the Convention plugin will find all action classes that implement com.opensymphony.xwork2.Action or //whose name ends with the word Action in specific packages. 
> //BUT THIS Action Class is never found...
> //public class SayHelloAction extends ActionSupport {
> //     public String execute() throws Exception {
> //         return "success";
> //     }
> //}
> //default.properties attached
> #
> # $Id: default.properties 722328 2008-12-02 01:56:24Z davenewton $
> #
> # Licensed to the Apache Software Foundation (ASF) under one
> # or more contributor license agreements.  See the NOTICE file
> # distributed with this work for additional information
> # regarding copyright ownership.  The ASF licenses this file
> # to you under the Apache License, Version 2.0 (the
> # "License"); you may not use this file except in compliance
> # with the License.  You may obtain a copy of the License at
> #
> #  http://www.apache.org/licenses/LICENSE-2.0
> #
> # Unless required by applicable law or agreed to in writing,
> # software distributed under the License is distributed on an
> # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> # KIND, either express or implied.  See the License for the
> # specific language governing permissions and limitations
> # under the License.
> #
> ### START SNIPPET: complete_file
> ### Struts default properties
> ###(can be overridden by a struts.properties file in the root of the classpath)
> ###
> ### Specifies the Configuration used to configure Struts
> ### one could extend org.apache.struts2.config.Configuration
> ### to build one's customize way of getting the configurations parameters into Struts
> # struts.configuration=org.apache.struts2.config.DefaultConfiguration
> ### This can be used to set your default locale and encoding scheme
> # struts.locale=en_US
> struts.i18n.encoding=UTF-8
> ### if specified, the default object factory can be overridden here
> ### Note: short-hand notation is supported in some cases, such as "spring"
> ###       Alternatively, you can provide a com.opensymphony.xwork2.ObjectFactory subclass name here
> # struts.objectFactory = spring
> ### specifies the autoWiring logic when using the SpringObjectFactory.
> ### valid values are: name, type, auto, and constructor (name is the default)
> struts.objectFactory.spring.autoWire = name
> ### indicates to the struts-spring integration if Class instances should be cached
> ### this should, until a future Spring release makes it possible, be left as true
> ### unless you know exactly what you are doing!
> ### valid values are: true, false (true is the default)
> struts.objectFactory.spring.useClassCache = true
> ### ensures the autowire strategy is always respected.
> ### valid values are: true, false (false is the default)
> struts.objectFactory.spring.autoWire.alwaysRespect = false
> ### if specified, the default object type determiner can be overridden here
> ### Note: short-hand notation is supported in some cases, such as "tiger" or "notiger"
> ###       Alternatively, you can provide a com.opensymphony.xwork2.util.ObjectTypeDeterminer implementation name here
> ### Note: By default, com.opensymphony.xwork2.util.DefaultObjectTypeDeterminer is used which handles type detection
> ###       using generics. com.opensymphony.xwork2.util.GenericsObjectTypeDeterminer was deprecated since XWork 2, it's
> ###       functions are integrated in DefaultObjectTypeDeterminer now.
> ###       To disable tiger support use the "notiger" property value here.
> #struts.objectTypeDeterminer = tiger
> #struts.objectTypeDeterminer = notiger
> ### Parser to handle HTTP POST requests, encoded using the MIME-type multipart/form-data
> # struts.multipart.parser=cos
> # struts.multipart.parser=pell
> struts.multipart.parser=jakarta
> # uses javax.servlet.context.tempdir by default
> struts.multipart.saveDir=
> struts.multipart.maxSize=2097152
> ### Load custom property files (does not override struts.properties!)
> # struts.custom.properties=application,org/apache/struts2/extension/custom
> ### How request URLs are mapped to and from actions
> #struts.mapper.class=org.apache.struts2.dispatcher.mapper.DefaultActionMapper
> ### Used by the DefaultActionMapper
> ### You may provide a comma separated list, e.g. struts.action.extension=action,jnlp,do
> ### The blank extension allows you to match directory listings as well as pure action names
> ### without interfering with static resources.
> struts.action.extension=action,,
> ### Used by FilterDispatcher
> ### If true then Struts serves static content from inside its jar.
> ### If false then the static content must be available at <context_path>/struts
> struts.serve.static=true
> ### Used by FilterDispatcher
> ### This is good for development where one wants changes to the static content be
> ### fetch on each request.
> ### NOTE: This will only have effect if struts.serve.static=true
> ### If true -> Struts will write out header for static contents such that they will
> ###             be cached by web browsers (using Date, Cache-Content, Pragma, Expires)
> ###             headers).
> ### If false -> Struts will write out header for static contents such that they are
> ###            NOT to be cached by web browser (using Cache-Content, Pragma, Expires
> ###            headers)
> struts.serve.static.browserCache=true
> ### Set this to false if you wish to disable implicit dynamic method invocation
> ### via the URL request. This includes URLs like foo!bar.action, as well as params
> ### like method:bar (but not action:foo).
> ### An alternative to implicit dynamic method invocation is to use wildcard
> ### mappings, such as <action name="*/*" method="{2}" class="actions.{1}">
> struts.enable.DynamicMethodInvocation = true
> ### Set this to true if you wish to allow slashes in your action names.  If false,
> ### Actions names cannot have slashes, and will be accessible via any directory
> ### prefix.  This is the traditional behavior expected of WebWork applications.
> ### Setting to true is useful when you want to use wildcards and store values
> ### in the URL, to be extracted by wildcard patterns, such as
> ### <action name="*/*" method="{2}" class="actions.{1}"> to match "/foo/edit" or
> ### "/foo/save".
> struts.enable.SlashesInActionNames = false
> ### use alternative syntax that requires %{} in most places
> ### to evaluate expressions for String attributes for tags
> struts.tag.altSyntax=true
> ### when set to true, Struts will act much more friendly for developers. This
> ### includes:
> ### - struts.i18n.reload = true
> ### - struts.configuration.xml.reload = true
> ### - raising various debug or ignorable problems to errors
> ###   For example: normally a request to foo.action?someUnknownField=true should
> ###                be ignored (given that any value can come from the web and it
> ###                should not be trusted). However, during development, it may be
> ###                useful to know when these errors are happening and be told of
> ###                them right away.
> struts.devMode = false
> ### when set to true, resource bundles will be reloaded on _every_ request.
> ### this is good during development, but should never be used in production
> struts.i18n.reload=false
> ### Standard UI theme
> ### Change this to reflect which path should be used for JSP control tag templates by default
> struts.ui.theme=xhtml
> struts.ui.templateDir=template
> #sets the default template type. Either ftl, vm, or jsp
> struts.ui.templateSuffix=ftl
> ### Configuration reloading
> ### This will cause the configuration to reload struts.xml when it is changed
> struts.configuration.xml.reload=false
> ### Location of velocity.properties file.  defaults to velocity.properties
> struts.velocity.configfile = velocity.properties
> ### Comma separated list of VelocityContext classnames to chain to the StrutsVelocityContext
> struts.velocity.contexts =
> ### Location of the velocity toolbox
> struts.velocity.toolboxlocation=
> ### used to build URLs, such as the UrlTag
> struts.url.http.port = 80
> struts.url.https.port = 443
> ### possible values are: none, get or all
> struts.url.includeParams = none
> ### Load custom default resource bundles
> # struts.custom.i18n.resources=testmessages,testmessages2
> ### workaround for some app servers that don't handle HttpServletRequest.getParameterMap()
> ### often used for WebLogic, Orion, and OC4J
> struts.dispatcher.parametersWorkaround = false
> ### configure the Freemarker Manager class to be used
> ### Allows user to plug-in customised Freemarker Manager if necessary
> ### MUST extends off org.apache.struts2.views.freemarker.FreemarkerManager
> #struts.freemarker.manager.classname=org.apache.struts2.views.freemarker.FreemarkerManager
> ### Enables caching of FreeMarker templates
> ### Has the same effect as copying the templates under WEB_APP/templates
> struts.freemarker.templatesCache=false
> ### Enables caching of models on the BeanWrapper
> struts.freemarker.beanwrapperCache=false
> ### See the StrutsBeanWrapper javadocs for more information
> struts.freemarker.wrapper.altMap=true
> ### maxStrongSize for MruCacheStorage for freemarker
> struts.freemarker.mru.max.strong.size=100
> ### configure the XSLTResult class to use stylesheet caching.
> ### Set to true for developers and false for production.
> struts.xslt.nocache=false
> ### Whether to always select the namespace to be everything before the last slash or not
> struts.mapper.alwaysSelectFullNamespace=false
> ### Whether to allow static method access in OGNL expressions or not
> struts.ognl.allowStaticMethodAccess=false
> ### END SNIPPET: complete_file
> //****************say-hello/index.jsp******************
> <%@ taglib prefix="s" uri="/struts-tags"%>
> <html>
>      <head>
>          <title>I <em>(State Your Name)</em></title>
>      </head>
>      <body>
>           <h3>Thats <em>Hedley!</em></h3>
>          <div>
>              <s:form action="say-hello">
>                  <s:textfield label="Name:" name="userName" size="30" maxlength="30" />
>                  <s:submit value="Submit" />
>              </s:form>
>          </div>
>      </body>
> </html>
> /***********say-hello-success.jsp***************
> <%@ taglib prefix="s" uri="/struts-tags"%>
> <html>
>      <head>
>          <title>Hello Success</title>
>      </head>
>      <body>
>      Hello <s:property value="userName" />
>      </body>
> </html>

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.