Uploaded image for project: 'Struts 1'
  1. Struts 1
  2. STR-2665

document permitted form field names and provide a validation method

Attach filesAttach ScreenshotAdd voteVotersWatch issueWatchersCreate sub-taskLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Open
    • Minor
    • Resolution: Unresolved
    • 1.2.7
    • Future
    • Documentation
    • None
    • Operating System: other
      Platform: Other
    • 37683

    Description

      Recently, I had to integrate with a portal that does a http form post into my
      struts application.

      Unfortunately, their field names (="action form bean properties") do not work
      with struts. Perhaps they are breaking some standard, but at least with some php
      environments, that was no problem.

      The following form field names were ok:

      • "card"
      • "IV"

      Problems arised with:

      • "PortalID"
      • "AuthValue"
      • "ServiceID"
      • "Created"

      Unfortunately, struts simply ignores these.
      The dirty fix is to manually extract them from the request parameters.

      Suggestions:
      1) document at the above help URL or within the
      org.apache.struts.action.ActionForm JavaDoc
      2) create a method that can be called during struts init() that
      a) takes all forms as declared in the struts-config.xml
      b) list the getter/setter properties that will not work!
      3) print a debug message for fields that could not be processed during operation
      (optionally)

      Since I also used the validator, at least there, the problems explicitly surfaced:
      <<Nov 28, 2005 3:41:09 PM org.apache.commons.validator.util.ValidatorUtils
      getValueAsString
      SEVERE: Unknown property 'ServiceID'
      java.lang.NoSuchMethodException: Unknown property 'ServiceID'
      at
      org.apache.commons.beanutils.PropertyUtilsBean.getSimpleProperty(PropertyUtilsBean.java:1122)
      at
      org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:686)
      at
      org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean.java:715)
      at org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:290)
      at
      org.apache.commons.validator.util.ValidatorUtils.getValueAsString(ValidatorUtils.java:105)
      at
      org.apache.struts.validator.FieldChecks.validateMaxLength(FieldChecks.java:812)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      at
      sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:585)
      at
      org.apache.commons.validator.ValidatorAction.executeValidationMethod(ValidatorAction.java:567)
      at org.apache.commons.validator.Field.validateForRule(Field.java:827)
      at org.apache.commons.validator.Field.validate(Field.java:906)
      at org.apache.commons.validator.Form.validate(Form.java:174)
      at org.apache.commons.validator.Validator.validate(Validator.java:367)
      at org.apache.struts.validator.ValidatorForm.validate(ValidatorForm.java:110)
      at
      com.privasphere.privalope.util.PsphValForm.validateFromAction(PsphValForm.java:160)
      at
      com.privasphere.privalope.control.action.LoginTicketAction.execute(LoginTicketAction.java:128)
      at
      com.privasphere.privalope.control.action.LoginTicketAction.execute(LoginTicketAction.java:93)
      at
      org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
      at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
      at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
      at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
      at
      org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
      at
      org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
      at
      org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
      at
      org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
      at
      org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:407)
      at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
      at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
      at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:526)
      at
      org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
      at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
      at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:827)
      at
      org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:731)
      at
      org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:526)
      at
      org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
      at
      org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
      at java.lang.Thread.run(Thread.java:595)>>

      Luckily, I was able to convince them to change the form field names, but others
      might not be able to do that.

      Attachments

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            Unassigned Unassigned
            hauser@acm.org Ralf Hauser

            Dates

              Created:
              Updated:

              Slack

                Issue deployment