tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From David Smith <d...@cornell.edu>
Subject Re: Expression Language in JSP and JasperException
Date Wed, 21 Feb 2007 16:19:25 GMT
Ok.  I'm not overly familiar with Stripes, so you'll have to bear with
me a little.  I can think of a few ways to handle this.

First, look at what makes a request from calculator.jsp unique.  You
could use the referrer header, the value of a submit button, or the
presence of the equation request parameter.  Below is an example using
the submit button:

<c:if test="${(param.submitBtn == 'Calculate') and (actionBean.result !=
null)}">
  <p>The answer is ${actionBean.result}</p>
</c:if>

A better solution would be to name the actionBean that's a result of
CalculatorActionBean something more descript than just 'actionBean' like
'calcBean'.  The main advantage here is it's simple and you could use
your original expression language test -- just change the name of the
object being tested:

<c:if test="${calcBean.result != null}">
  ... display the result....
</c:if>

A more complicated solution if you can't change the name of 'actionBean'
might be to test the type of actionBean like...

<c:set var="calcAvailable"><jsp:expression>
  (request.getAttribute("actionBean") != null) &&
(request.getAttribute("actionBean") instanceOf
com.some.packages.action.CalculatorActionBean )</jsp:expression></c:set>
<c:choose>
<c:when test="${calcAvailable and (actionBean.result != null)}">
  <p>The answer is .... ${actionBean.result}</p>
</c:when>
<c:when test="${calcAvailable}">
  <p>Sorry, I couldn't understand your equation.  Please rephrase it...</p>
</c:when>
<c:otherwise>
  <!-- Just logged in.  Display the form. -->
</c:otherwise>
</c:choose>

The essential point of this is testing for a property to be null is not
the same as testing for it's presence.  You'll have to know if it has a
property before you can test the property for null.

--David

Piotr Kiraga wrote:

> Hi David,
>
>> Ok .... forgive me now, but this is getting confusing.  Where does
>> result come into this picture?  Were you expecting actionBean to be an
>> instance of a different class?  You aren't offering a lot to go on here.
>
>
> Sorry for mixup. I've just thought that it is just about some option
> in Tomcat configuration or something, and I haven't knew it. Like I
> see... It may be not. :(
>
> Here goes more background.
>
> login.jsp (handled by LoginActionBean class) redirects after
> submission login form to calculator.jsp. After submition form from
> calculator.jsp  (what is handled by CalculatorActionBean class) it
> returns to calculator.jsp and shows the result of mathematical
> equation. Sources of calculator.jsp and it's class are placed below.
>
> Problem shows when I'm submiting from LoginActionVean to
> calculator.jsp. Like I wrote before, LoginActionBean doesn't have
> result field because it doesn't need it. But JSP (in this case used by
> two classes) expects result in:
> 46:        <c:if test="${!empty actionBean.result}">
> 47:            Result: ${actionBean.result}<br/>
> line.
>
> Here actionBean could be an instance of different class.
>
> Sorry for so much source in thread, here it goes:
>
>
>
>
> #########################
> package com.some.packages.action;
>
> import net.sourceforge.stripes.action.ActionBean;
> import net.sourceforge.stripes.action.ActionBeanContext;
> import net.sourceforge.stripes.action.DefaultHandler;
> import net.sourceforge.stripes.action.DontValidate;
> import net.sourceforge.stripes.action.ForwardResolution;
> import net.sourceforge.stripes.action.Resolution;
> import net.sourceforge.stripes.validation.LocalizableError;
> import net.sourceforge.stripes.validation.Validate;
> import net.sourceforge.stripes.validation.ValidationErrors;
> import net.sourceforge.stripes.validation.ValidationMethod;
>
> /**
> * A very simple calculator action.
> * @author Tim Fennell
> */
>
> public class CalculatorActionBean implements ActionBean {
>
>     private ActionBeanContext context;
>     private String forwardSuccess = "/calculator.jsp";
>     private String forwardFail = "/index.jsp";
>     
>     private Double result;
>     @Validate(required=true, mask="^\\d*$") private double numberOne;
>     @Validate(required=true, mask="^\\d*$") private double numberTwo;
>
>     public CalculatorActionBean() {
>     }
>     
>     /***** execution *****/
>     
>     /*
>      * Handler method.
>      * Handles addition functionality of web application form.
>      */
>     @DefaultHandler
>     @DontValidate
>     public Resolution init() {
>         return new ForwardResolution(forwardSuccess);
>     }
>
>     /*
>      * Handler method.
>      * Handles addition functionality of web application form.
>      */
>     public Resolution addition() {
>         result = getNumberOne() + getNumberTwo();
>         return new ForwardResolution(forwardSuccess);
>     }
>
>     /***** getters and setters *****/
>     
>     public ActionBeanContext getContext() {
>         return context;
>     }
>
>     public void setContext(ActionBeanContext context) {
>         this.context = context;
>     }
>
>     public double getNumberOne() {
>         return numberOne;
>     }
>
>     public void setNumberOne(double numberOne) {
>         this.numberOne = numberOne;
>     }
>
>     public double getNumberTwo() {
>         return numberTwo;
>     }
>
>     public void setNumberTwo(double numberTwo) {
>         this.numberTwo = numberTwo;
>     }
>
>     public Double getResult() {
>         return result;
>     }
>
>     public void setResult(Double result) {
>         this.result = result;
>     }
>
> }
> #########################
>
>
>
>
> #########################
> <%@ page contentType="text/html;charset=UTF-8" language="java" %>
> <%@ taglib prefix="stripes"
> uri="http://stripes.sourceforge.net/stripes.tld"%>
> <%@ taglib prefix="display" uri="http://displaytag.sf.net"%>
> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
> <fmt:setBundle basename="StripesResources"/>
>
> <stripes:layout-render name="/pages/layout/default.jsp">
>
>    <stripes:layout-component name="contents">
>
>        <h3><fmt:message key="title" /> - <fmt:message
> key="title.calculator"/></h3>
>
>        <stripes:errors />
>
>        <stripes:form action="/Calculator.action" focus="">
>
>            <table>
>                <tr>
>                    <td>
>                        <div>
>                            <div style="width:150px;"><stripes:label
> for="numberOne"/></div>
>                            <div style="display:inline"><stripes:text
> name="numberOne"/></div>
>                        </div>
>                        <div>
>                            <div style="width:150px;"><stripes:label
> for="numberTwo"/></div>
>                            <div style="display:inline"><stripes:text
> name="numberTwo"/></div>
>                        </div>
>                    </td>
>                    <td valign="bottom">
>                        <div>
>                            <stripes:submit name="addition"/>
>                            <stripes:submit name="subtraction"/>
>                            <stripes:submit name="multiplication"/>
>                            <stripes:submit name="division"/>
>                        <div>
>                    </td>
>                </tr>
>            </table>
>
>        </stripes:form>
>
>        <br/>
>
>        <hr size="1" noshade color="#000" align="left"><br/>
>        <c:if test="${!empty actionBean.result}">
>            Result: ${actionBean.result}<br/>
>        </c:if>
>        <c:if test="${!empty sessionScope.user.userName}">
>            Logged in as: ${sessionScope.user.firstName}
> ${sessionScope.user.lastName} (${sessionScope.user.userName})<br/>
>        </c:if>
>
>    </stripes:layout-component>
>
> </stripes:layout-render>
> #########################
>
>
>
>


---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


Mime
View raw message