javax.el.PropertyNotFoundException: Property '

2019-05-23 16:36发布

问题:

I was using scriptlets earlier, but now I switched to the mvc. I am not able to retrieve values on to the JSP page and getting errors:

javax.el.PropertyNotFoundException: Property 'tname' not found on type java.lang.String

Code of the Bean:

public class regForm extends org.apache.struts.validator.ValidatorForm implements Iprafunctions {

    private String tname = null;
    private String tfee = null;

    public String getTfee() {
        return tfee;
    }

    public void setTfee(String tfee) {
        this.tfee = tfee;
    }

    public String getTname() {
        return tname;
    }

    public void setTname(String tname) {
        this.tname = tname;
    }
    public regForm() {
        super();
    }
}

Action controller:

public ActionForward mvc(ActionMapping mapping, ActionForm form,
        HttpServletRequest request, HttpServletResponse response)
        throws Exception {
    regForm reg = (regForm) form;
    String sql = "Select tname,tfee from addtest order by tname";
    ResultSet rs = SQLC.getData(sql, null);
    Collection myBeans = new ArrayList();
    while (rs.next()) {
        String testname = rs.getString("tname");
        String testfee = rs.getString("tfee");
        reg.setTname(testname);
        reg.setTfee(testfee);
        myBeans.add(reg.getTname());
        myBeans.add(reg.getTfee());
    }
    request.setAttribute("myBeans", myBeans);
    return mapping.findForward(SUCCESS);
}

Access in JSP Page

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<table>
    <tr><td>Name</td><td>Fee</td></tr>
    <c:forEach var="reg" items="${myBeans}">
        <tr>
            <td><c:out value="${reg.tname}"></c:out></td>
            <td><c:out value="${reg.tfee}"></c:out></td>
        </tr>
    </c:forEach>
</table>

回答1:

I think you are adding the names and the fee directly to the arraylist, but you should be adding the whole regForm object in the arraylist.

Instead of the below code

myBeans.add(reg.getTname());
myBeans.add(reg.getTfee());

you need to do like

myBeans.add(reg);

moreover dont use the same object that you got from the form. Try to create new objects and add in the arraylist and try to use generics.

EDIT:

while (rs.next()) {
        String testname = rs.getString("tname");
        String testfee = rs.getString("tfee");
        regForm beanObject = new regForm();
        beanObject.setTname(testname);
        beanObject.setTfee(testfee);
        myBeans.add(beanObject);
    }


回答2:

Actually you are adding strings in your Collection and you are trying to invoke

getTName() by ${reg.tname}

Either add whole bean to your collection or just replace JSTL with ${reg}