Hello,

I asked this question before. In my application, the bean:write doesn't
work with numeric types after I update struts to 1.1. It kept throwing a
message: "org.apache.jasper.JasperException: Cannot find message
resources under key org.apache.struts.action.MESSAGE".

The whole exception message is listed at the end of the email.

It works on struts 1.0.2. (I mean, without changing anything in my
source, just update the jar files) I use jdk1.3.1 and tomcat 4.1.24.

Attached is the code. It's the source from a struts book and I added a
bean. I have three classes, an action, a form and a bean. Two JSP files
index.jsp and quote.jsp.

I also attached the struts-config file and the web.xml file.

Look for the "<!-- HERE IS THE PROBLEM -->" line in the quote.jsp. The
problem disappears after I remove the next line.

Thank all of you very much! 


//==> LookupAction.java
package wiley;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class LookupAction extends Action {

    protected Quote getQuote(String symbol) {

        if ( symbol.equalsIgnoreCase("SUNW") ) {
            Quote quote = new Quote();
            quote.setPrice(25.00);
            quote.setPriceStr("25.00String");
            return quote;
        }
        return null;
    }

    public ActionForward perform(ActionMapping mapping,
                                 ActionForm form,
                                 HttpServletRequest request,
                                 HttpServletResponse response)
        throws IOException, ServletException {

        Quote quote = null;

        // Default target to success
        String target = new String("success");

        if ( form != null ) {

            // Use the LookupForm to get the request parameters
            LookupForm lookupForm = (LookupForm)form;

            String symbol = lookupForm.getSymbol();

            quote = getQuote(symbol);
        }

        // Set the target to failure
        if ( quote == null ) {

            target = new String("failure");
        }
        else {

            request.setAttribute("QUOTE", quote);
        }
        // Forward to the appropriate View
        return (mapping.findForward(target));
    }
}


//==>LookupForm.java
package wiley;

import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;

public class LookupForm extends ActionForm {

    private String symbol = null;

    public String getSymbol() {

        return (symbol);
    }

    public void setSymbol(String symbol) {

        this.symbol = symbol;
    }

    public void reset(ActionMapping mapping,
                      HttpServletRequest request) {

        this.symbol = null;
    }
}

//==>Quote.java
package wiley;

public class Quote {
    private double price;
    private String priceStr;

    public String getPriceStr() {
        return priceStr;
    }
    public void setPriceStr(String newPriceStr) {
        this.priceStr = newPriceStr;
    }
    public double getPrice() {
        return price;
    }
    public void setPrice(double newPrice) {
        this.price = newPrice;
    }
}

//==>index.jsp

<%@ page language="java" %>
<%@ taglib
  uri="/tlds/struts-html.tld"
  prefix="html" %>

<html>
  <head>
    <title>Wiley Struts Application</title>
  </head>

  <body>
    <table width="500"
    border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td>&nbsp;</td>
      </tr>
      <tr bgcolor="#36566E"> 
        <td height="68" width="48%"> 
          <div align="left">
            <img src="images/hp_logo_wiley.gif"
             width="220"
         height="74">
          </div>
        </td>
      </tr>
      <tr>
        <td>&nbsp;</td>
      </tr>
    </table>

    <html:form action="Lookup"
      name="lookupForm"
      type="wiley.LookupForm" > 
      <table width="45%" border="0">
        <tr>
          <td>Symbol:</td>
          <td><html:text property="symbol" /></td>
        </tr>
        <tr>
          <td colspan="2" align="center"><html:submit /></td>
        </tr>
      </table>
    </html:form> 

  </body>
</html>


//==>quote.jsp
<%@ taglib uri="/tlds/struts-bean.tld" prefix="bean" %>
<html>
  <head>
    <title>Wiley Struts Application</title>
  </head>
  <body>

    <table width="500"
      border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td>&nbsp;</td>
      </tr>
      <tr bgcolor="#36566E"> 
        <td height="68" width="48%"> 
          <div align="left">
            <img src="images/hp_logo_wiley.gif"
              width="220" height="74">
          </div>
        </td>
      </tr>
      <tr>
        <td>&nbsp;</td>
      </tr>
      <tr>
        <td>&nbsp;</td>
      </tr>
      <tr>
        <td>&nbsp;</td>
      </tr>
      <tr>
        <td>
          <!-- HERE IS THE PROBLEM -->
          Price(double): <bean:write name="QUOTE" property="price"/>

          <!-- THIS WORKS -->  
          Price(str): <bean:write name="QUOTE" property="priceStr"/>
        </td>
      </tr>
      <tr>
        <td>&nbsp;</td>
      </tr>
    </table>
  </body>
</html>

//==>struts-config.xml
<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE struts-config PUBLIC
  "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
  "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd";>

<struts-config>
  <form-beans>
    <form-bean name="lookupForm" type="wiley.LookupForm"/>
  </form-beans>
  <action-mappings>
    <action path="/Lookup" type="wiley.LookupAction" name="lookupForm"
input="/index.jsp">
      <forward name="success" path="/quote.jsp"/>
      <forward name="failure" path="/index.jsp"/>
    </action>
  </action-mappings>
</struts-config>

//==>web.xml
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE web-app PUBLIC
    "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
    "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd";>

<web-app>

  <display-name>struts</display-name>

<servlet>
  <servlet-name>action</servlet-name>
  <servlet-class>
    org.apache.struts.action.ActionServlet
  </servlet-class>
  <init-param>
    <param-name>config</param-name>
    <param-value>/WEB-INF/struts-config.xml</param-value>
  </init-param>
  <load-on-startup>2</load-on-startup>
</servlet>

<servlet-mapping>
  <servlet-name>action</servlet-name>
  <url-pattern>*.do</url-pattern>
</servlet-mapping>

<taglib>
  <taglib-uri>/tlds/struts-template.tld</taglib-uri>
  <taglib-location>
    /WEB-INF/tlds/struts-template.tld
  </taglib-location>
</taglib> 
<taglib>
  <taglib-uri>/tlds/struts-html.tld</taglib-uri>
  <taglib-location>
    /WEB-INF/tlds/struts-html.tld
  </taglib-location>
</taglib>
<taglib>
  <taglib-uri>/tlds/struts-bean.tld</taglib-uri>
  <taglib-location>
    /WEB-INF/tlds/struts-bean.tld
  </taglib-location>
</taglib>
</web-app>


//==> Exception Message

exception


org.apache.jasper.JasperException: Cannot find message resources under key 
org.apache.struts.action.MESSAGE
        at 
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:254)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
        at 
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684)
        at 
org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:432)
        at 
org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:356)
        at 
org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1069)
        at 
org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:455)
        at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:279)
        at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
        at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
        at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
        at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
        at 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
        at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
        at 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
        at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2415)
        at 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
        at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
        at 
org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
        at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
        at 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
        at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
        at 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
        at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
        at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:594)
        at 
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:392)
        at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:565)
        at 
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:619)
        at java.lang.Thread.run(Thread.java:536)

root cause


javax.servlet.ServletException: Cannot find message resources under key 
org.apache.struts.action.MESSAGE
        at 
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:533)
        at org.apache.jsp.quote_jsp._jspService(quote_jsp.java:100)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:137)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
        at 
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:210)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
        at 
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684)
        at 
org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:432)
        at 
org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:356)
        at 
org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1069)
        at 
org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:455)
        at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:279)
        at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
        at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
        at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
        at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
        at 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
        at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
        at 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
        at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2415)
        at 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
        at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
        at 
org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
        at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
        at 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
        at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
        at 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
        at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
        at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:594)
        at 
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:392)
        at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:565)
        at 
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:619)
        at java.lang.Thread.run(Thread.java:536)



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to