在main.jsp中有如下语句:
<jsp:include page="news.jsp" />
<jsp:include page="weather.jsp" />
<jsp:include page="entertain.jsp" />
在news.jsp中有如下语句:
<jsp:useBean id="newsfeed" class="com.wrox.begjsp.ch2.NewsFeed" scope="request" >
<jsp:setProperty name="newsfeed"  property="topic" value="news"/>
<jsp:getProperty name="newsfeed" property="value"/>
</jsp:useBean>
在weather.jsp中有如下语句:
<jsp:useBean id="newsfeed" class="com.wrox.begjsp.ch2.NewsFeed" scope="request" >
<jsp:setProperty name="newsfeed"  property="topic" value="weather"/>
</jsp:useBean>
在entertain.jsp中有如下语句:
<jsp:useBean id="newsfeed" class="com.wrox.begjsp.ch2.NewsFeed" scope="request" >
<jsp:setProperty name="newsfeed"  property="topic" value="entertainment"/>
<jsp:getProperty name="newsfeed" property="value"/>
</jsp:useBean>
为什么只有news.jsp中的bean执行了,而另外两个页面的bean没执行啊?(好像和scope属性有关)
我在类NewsFeed中加调试用的输出语句,tomcat的命令窗口输出表明只创建的一次bean,另外两个bean没创建,也没执行

解决方案 »

  1.   

    把其他两个bean的id换个名试试
      

  2.   

    在main.jsp中有如下语句:
    <jsp:include page="news.jsp" />
    <jsp:include page="weather.jsp" />
    <jsp:include page="entertain.jsp" />
    这三个都是动态include,是属于同一个请求<jsp:useBean id="newsfeed" class="com.wrox.begjsp.ch2.NewsFeed" scope="request" >
    这句话表示在request的范围内查找一个com.wrox.begjsp.ch2.NewsFeed类的对象,并赋值给一个变量newsfeed,如果没有该类对象则new一个,如果已经有了则直接获得。你在第一个news.jsp里面已经初始化了,后面两个页面就可以直接拿不需要初始化
      

  3.   

    直接拿是什么意思啊?
    我后来改了下,发现这样写可以运行出来:
    可以运行的代码:
    <jsp:useBean id="newsfeed" class="com.wrox.begjsp.ch2.NewsFeed" scope="request" />
    <jsp:setProperty name="newsfeed"  property="topic" value="entertainment"/>
    <jsp:getProperty name="newsfeed" property="value"/>

    不可以运行的代码:
    <jsp:useBean id="newsfeed" class="com.wrox.begjsp.ch2.NewsFeed" scope="request" >
    <jsp:setProperty name="newsfeed" property="topic" value="entertainment"/>
    <jsp:getProperty name="newsfeed" property="value"/>
    </jsp:useBean>
    有区别吗?
      

  4.   

    在main.jsp中有如下语句:
    <jsp:include page="news.jsp" />
    <jsp:include page="weather.jsp" />
    <jsp:include page="entertain.jsp" />
    这时候你这4个jsp页面里所有的标签都是看成在一个jsp文件里使用的。
    在一个HTML或者JSP文件中,不可以出现2个id的值是相同的,如果相同,则只会取页面加载时取到的第一个id的值。
      

  5.   

    取第一个id的值的话,为什么我改之前后两个页面不能运行,而改后可以运行呢?
    还有<jsp:include page="*.jsp" /> 不是把"*.jsp"的运行结果返回给主页面吗?
      

  6.   

    同意楼上的意见。你的三个jsp文件中,使用的bean的名字都叫做newsfeed,这就出现问题了,这样肯定不能正常工作的。
      

  7.   


    <jsp:setProperty>这个标签使用Bean给定的setter方法,表示为这个变量赋值,这个里面有个参数就是name指定所需要赋值的bean对象,所以这个标签是不可以放在bean标签里面的就相当于
    NewsFeed newsfeed= .....
    newsfeed.setTopic(entertainment)...
            
      

  8.   

    但是,我原先错误的代码中,news.jsp页面这样是可以的啊,另外两个页面不可以。
    我摸索到了一个改正方法:就是在原先错误的代码之上,把三个页面中的scope属性由request改为page就可以正常运行,只是不知道背后的原因
      

  9.   

    囧....jsp六个action始终觉得不够熟练...也许是我觉得太烦了吧...
    写在page里面就不存在相同变量名的问题了应该是会正常的,
    你说在page3里面修改了后就可以运行还不大了解
      

  10.   

    我也在看JSP程序设计,当时做练习题的时候也碰到这个问题。当时我是把三个JSP的"useBean"的id改成不同的了,当时就感觉别扭,这样就会有三个NewsFeed实例。
    今天看到第八章的useBean时会想起这个问题了,说这个id属性在同一个JSP页面中不能重复(包括使用<%@ include%>指令包含进来的)。
    但是这里用的是<jsp:include>标准动作,没说不可以啊!所以用这种方法id肯定是可以重复的。但是具体怎么做还得继续研究!