Uploaded image for project: 'Struts 2'
  1. Struts 2
  2. WW-3063

Codebehind plugin fails to locate SayHelloAction class

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Minor
    • Resolution: Incomplete
    • 2.1.6
    • None
    • Plugin - CodeBehind
    • None
    • J2SE 1.6.0.14
      TC 1.6.014
      Struts 2.1.6

    • Important

    Description

      //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
      #

      1. $Id: default.properties 722328 2008-12-02 01:56:24Z davenewton $
        #
      2. Licensed to the Apache Software Foundation (ASF) under one
      3. or more contributor license agreements. See the NOTICE file
      4. distributed with this work for additional information
      5. regarding copyright ownership. The ASF licenses this file
      6. to you under the Apache License, Version 2.0 (the
      7. "License"); you may not use this file except in compliance
      8. with the License. You may obtain a copy of the License at
        #
      9. http://www.apache.org/licenses/LICENSE-2.0
        #
      10. Unless required by applicable law or agreed to in writing,
      11. software distributed under the License is distributed on an
      12. "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
      13. KIND, either express or implied. See the License for the
      14. specific language governing permissions and limitations
      15. under the License.
        #
          1. START SNIPPET: complete_file
          1. Struts default properties
            ###(can be overridden by a struts.properties file in the root of the classpath)
            ###
          1. Specifies the Configuration used to configure Struts
          2. one could extend org.apache.struts2.config.Configuration
          3. to build one's customize way of getting the configurations parameters into Struts
      1. struts.configuration=org.apache.struts2.config.DefaultConfiguration
          1. This can be used to set your default locale and encoding scheme
      1. struts.locale=en_US
        struts.i18n.encoding=UTF-8
          1. if specified, the default object factory can be overridden here
          2. Note: short-hand notation is supported in some cases, such as "spring"
          3. Alternatively, you can provide a com.opensymphony.xwork2.ObjectFactory subclass name here
      1. struts.objectFactory = spring
          1. specifies the autoWiring logic when using the SpringObjectFactory.
          2. valid values are: name, type, auto, and constructor (name is the default)
            struts.objectFactory.spring.autoWire = name
          1. indicates to the struts-spring integration if Class instances should be cached
          2. this should, until a future Spring release makes it possible, be left as true
          3. unless you know exactly what you are doing!
          4. valid values are: true, false (true is the default)
            struts.objectFactory.spring.useClassCache = true
          1. ensures the autowire strategy is always respected.
          2. valid values are: true, false (false is the default)
            struts.objectFactory.spring.autoWire.alwaysRespect = false
          1. if specified, the default object type determiner can be overridden here
          2. Note: short-hand notation is supported in some cases, such as "tiger" or "notiger"
          3. Alternatively, you can provide a com.opensymphony.xwork2.util.ObjectTypeDeterminer implementation name here
          4. Note: By default, com.opensymphony.xwork2.util.DefaultObjectTypeDeterminer is used which handles type detection
          5. using generics. com.opensymphony.xwork2.util.GenericsObjectTypeDeterminer was deprecated since XWork 2, it's
          6. functions are integrated in DefaultObjectTypeDeterminer now.
          7. To disable tiger support use the "notiger" property value here.
            #struts.objectTypeDeterminer = tiger
            #struts.objectTypeDeterminer = notiger
          1. Parser to handle HTTP POST requests, encoded using the MIME-type multipart/form-data
      1. struts.multipart.parser=cos
      2. struts.multipart.parser=pell
        struts.multipart.parser=jakarta
      3. uses javax.servlet.context.tempdir by default
        struts.multipart.saveDir=
        struts.multipart.maxSize=2097152
          1. Load custom property files (does not override struts.properties!)
      1. struts.custom.properties=application,org/apache/struts2/extension/custom
          1. How request URLs are mapped to and from actions
            #struts.mapper.class=org.apache.struts2.dispatcher.mapper.DefaultActionMapper
          1. Used by the DefaultActionMapper
          2. You may provide a comma separated list, e.g. struts.action.extension=action,jnlp,do
          3. The blank extension allows you to match directory listings as well as pure action names
          4. without interfering with static resources.
            struts.action.extension=action,,
          1. Used by FilterDispatcher
          2. If true then Struts serves static content from inside its jar.
          3. If false then the static content must be available at <context_path>/struts
            struts.serve.static=true
          1. Used by FilterDispatcher
          2. This is good for development where one wants changes to the static content be
          3. fetch on each request.
          4. NOTE: This will only have effect if struts.serve.static=true
          5. If true -> Struts will write out header for static contents such that they will
          6. be cached by web browsers (using Date, Cache-Content, Pragma, Expires)
          7. headers).
          8. If false -> Struts will write out header for static contents such that they are
          9. NOT to be cached by web browser (using Cache-Content, Pragma, Expires
          10. headers)
            struts.serve.static.browserCache=true
          1. Set this to false if you wish to disable implicit dynamic method invocation
          2. via the URL request. This includes URLs like foo!bar.action, as well as params
          3. like method:bar (but not action:foo).
          4. An alternative to implicit dynamic method invocation is to use wildcard
          5. 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

          6. "/foo/save".
            struts.enable.SlashesInActionNames = false
          1. use alternative syntax that requires %{} in most places
          2. to evaluate expressions for String attributes for tags
            struts.tag.altSyntax=true
          1. when set to true, Struts will act much more friendly for developers. This
          2. includes:
          3. - struts.i18n.reload = true
          4. - struts.configuration.xml.reload = true
          5. - raising various debug or ignorable problems to errors
          6. For example: normally a request to foo.action?someUnknownField=true should
          7. be ignored (given that any value can come from the web and it
          8. should not be trusted). However, during development, it may be
          9. useful to know when these errors are happening and be told of
          10. them right away.
            struts.devMode = false
          1. when set to true, resource bundles will be reloaded on every request.
          2. this is good during development, but should never be used in production
            struts.i18n.reload=false
          1. Standard UI theme
          2. 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
          1. Configuration reloading
          2. This will cause the configuration to reload struts.xml when it is changed
            struts.configuration.xml.reload=false
          1. Location of velocity.properties file. defaults to velocity.properties
            struts.velocity.configfile = velocity.properties
          1. Comma separated list of VelocityContext classnames to chain to the StrutsVelocityContext
            struts.velocity.contexts =
          1. Location of the velocity toolbox
            struts.velocity.toolboxlocation=
          1. used to build URLs, such as the UrlTag
            struts.url.http.port = 80
            struts.url.https.port = 443
          2. possible values are: none, get or all
            struts.url.includeParams = none
          1. Load custom default resource bundles
      1. struts.custom.i18n.resources=testmessages,testmessages2
          1. workaround for some app servers that don't handle HttpServletRequest.getParameterMap()
          2. often used for WebLogic, Orion, and OC4J
            struts.dispatcher.parametersWorkaround = false
          1. configure the Freemarker Manager class to be used
          2. Allows user to plug-in customised Freemarker Manager if necessary
          3. MUST extends off org.apache.struts2.views.freemarker.FreemarkerManager
            #struts.freemarker.manager.classname=org.apache.struts2.views.freemarker.FreemarkerManager
          1. Enables caching of FreeMarker templates
          2. Has the same effect as copying the templates under WEB_APP/templates
            struts.freemarker.templatesCache=false
          1. Enables caching of models on the BeanWrapper
            struts.freemarker.beanwrapperCache=false
          1. See the StrutsBeanWrapper javadocs for more information
            struts.freemarker.wrapper.altMap=true
          1. maxStrongSize for MruCacheStorage for freemarker
            struts.freemarker.mru.max.strong.size=100
          1. configure the XSLTResult class to use stylesheet caching.
          2. Set to true for developers and false for production.
            struts.xslt.nocache=false
          1. Whether to always select the namespace to be everything before the last slash or not
            struts.mapper.alwaysSelectFullNamespace=false
          1. Whether to allow static method access in OGNL expressions or not
            struts.ognl.allowStaticMethodAccess=false
          1. 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>

      Attachments

        Activity

          People

            Unassigned Unassigned
            mgainty Martin Gainty
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: