Amos
Amos

Reputation: 21

javax.servlet.jsp.JspException: Cannot find bean: "CommentsUpdated" in any scope

Struts-config.xml:

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts-config PUBLIC
      "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
      "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">
<struts-config>
  <form-beans>
  </form-beans>

  <global-exceptions>
  </global-exceptions>

<global-forwards>
    <forward name="welcome"  path="/Welcome.do"/>
</global-forwards>

<action-mappings>
    <action path="/Link" parameter="method" type="com.sicmsb.action.LinkAction">
        <forward name="search" path="search"/>
    </action>
    <action path="/Welcome" forward="/welcomeStruts.jsp"/>
</action-mappings>

<controller processorClass="org.apache.struts.tiles.TilesRequestProcessor"/>

<message-resources parameter="com/vaannila/ApplicationResource"/>

<plug-in className="org.apache.struts.tiles.TilesPlugin" >
    <set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml" />      
    <set-property property="moduleAware" value="true" />
</plug-in>

<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
    <set-property
        property="pathnames"
        value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
</plug-in>

</struts-config>

tiles-defs.xml:

<?xml version="1.0" encoding="UTF-8" ?>

 <!DOCTYPE tiles-definitions PUBLIC
       "-//Apache Software Foundation//DTD Tiles Configuration 1.1//EN"
       "http://jakarta.apache.org/struts/dtds/tiles-config_1_1.dtd">
<tiles-definitions>
    <definition name="baseLayout" path="/common-layout.jsp">
        <put name="header" value="/header.jsp" />
        <put name="body" value="/body.jsp" />
        <put name="footer" value="/footer.jsp" />
    </definition>
    <definition name="search" extends="baseLayout">

        <put name="body" value="/searchMyUser.jsp" />
    </definition>
</tiles-definitions>

common-layout.jsp:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">
<html>

<head>
<title></title>
</head>
<body>
     <table border="1"  width="100%" height="100%">
        <tr>
            <td><tiles:insert attribute="header" /></td>
        </tr>

        <tr>
            <td><tiles:insert attribute="body" /></td>
        </tr>

        <tr>
            <td><tiles:insert attribute="footer" /></td>
        </tr>
    </table>
</body>
</html>

searchMyUser.jsp:

<%@page import="com.sicmsb.bean.Comments"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%>

<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
<script>
    function submitAdd(form) {
        form.submit();
    }

    function goDetail(commentId) {
        var myform = document['detForm'];
        //myform.action = "/detail.do";
        myform['commentId'].value = commentId;
        myform.submit();
    }
</script>
<style>
A {
    text-decoration: underline;
    color: blue;
    cursor: pointer;
}
</style>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Search here</title>
</head>
<body>
    <form name="detForm" action="details.do" method="post">
        <input type="hidden" name="commentId" />
    </form>

    <h1>Search in MyUser</h1>

    <form action="SearchUser.do" method="post">
        <table cellpadding="3pt">
            <tr>
                <td>Insert Name : <html:text name="CommentsUpdated"
                        property="myUser" size="30"></html:text></td>
            </tr>
        </table>
        <p />
        <input type="button" value="Search"
            onclick="this.disabled=true; submitAdd(this.form)" />
    </form>

    <hr />

    <table>
        <tr>
            <th>Name</th>
            <th>Email</th>
            <th>Webpage</th>
            <th>Summary</th>
            <th>Comments</th>
        </tr>

        <logic:iterate id="comment" name="listComments"
            type="com.sicmsb.bean.Comments">
            <tr>
                <td><a onclick="goDetail('<%=comment.getCommentId()%>')"> <bean:write
                            name="comment" property="myuser" />
                </a>
                <td>|<bean:write name="comment" property="email" />
                <td>|<bean:write name="comment" property="webpage" />
                <td>|<bean:write name="comment" property="summary" />
                <td>|<bean:write name="comment" property="comments" />
            </tr>
        </logic:iterate>
    </table>
</body>
</html>

LinkAction.java:

package com.sicmsb.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.actions.DispatchAction;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForward;

public class LinkAction extends DispatchAction {
    public ActionForward Search(ActionMapping mapping, ActionForm  form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        return mapping.findForward("search");
    }
}

I managed to create the template and call in the forms without the "name" attributes.It worked, then i realized i have to call in forms that have names attribute(CommentsUpdated) so that i able to pass the variables for digging the data from database.Unluckily it throws error like this:

javax.servlet.jsp.JspException: Cannot find bean: "CommentsUpdated" in any scope.

i understand that the name attribute in my serachMyUser.jsp causing this error, but i'm stuck on this part, i've tried to search in google for examples, but all i get is the forms were called in without names attribute in it.

Upvotes: 2

Views: 22116

Answers (2)

Roman C
Roman C

Reputation: 1

If you didn't set the name property in the action config, which should be the same as <form-bean> name, but used the name in the tag

<html:text name="CommentsUpdated" .../>

of course you got an exception

Cannot find bean: “CommentsUpdated” in any scope

Struts will instantiate a form-bean and pass it to the action if the form bean and action name are configured. If you want to instantiate it yourself then you should put it into any scope before accessing it in JSP.

Upvotes: 0

Amos
Amos

Reputation: 21

<action path="/Link" parameter="method" type="com.sicmsb.action.LinkAction" name="CommentsUpdated">
            <forward name="baseLayout" path="baseLayout"/>
            <forward name="search" path="search"/>
            <forward name="details" path="details"/>
            <forward name="insert" path="insert"/>

finally i found the Problem, after i enter name="CommentsUpdated" inside the activity in struts-config.xml..it works! hope this might helpful for others too!

Upvotes: 0

Related Questions