nojave 2009-10-13 10:15
浏览 565
已采纳

[能不能实现?] struts2 访问首页数据动态加载

思路是: 首页index.jsp,动态加载数据的action: loadIndex.action
在访问index.jsp时,执行loadIndex.action,由action得到数据库中数据后,[color=red][b]仍然将数据返回给index.jsp[/b][/color]由index.jsp显示数据.

[b]问题补充:[/b]
谢谢3位的回答,
lovewhzlq (CTO) 大大,

我尝试用ExtJs实现Ajax提交,

[code="java"]
Ext.onReady(function() {
window.location.href = 'loadindex.action?id=xxxx;

}
);[/code]
却无法避免重复执行action的问题,变成死循环了.
有什么办法能让它只执行一次呢?
就像Ext.data.Store那样只load一次.

[b]问题补充:[/b]
确实是,
Ext里有无可以用来调用url的东东呢?
[code="java"]
Ext.Ajax.request({
url : 'loadindex.action?id=xxx
});

[/code]

?
[b]问题补充:[/b]
感谢 lovewhzlq (CTO) 大大,
我现在已经可以成功提交ajax请求去执行loadIndex.action了.
[code="java"]
Ext.onReady(function() {
Ext.Ajax.request({
url : 'loadindex.action?id=LiteonIT'
});
});
[/code]
可是发现执行完后返回的数据struts2标签无法识别?
我在firebug下可以看到数据库的返回数据.
但是用之类的标签却得不到数据,页面空白.
是否跟Ext.Ajax.request返回的数据格式有关?

[b]问题补充:[/b]
[code="java"][/code]谢谢.
index.jsp
[code="xml"]
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<head>
    <title>Tools Shop</title>
    <link rel="stylesheet" type="text/css" href="css/style.css" />
    <script type="text/javascript" src="js/boxOver.js"></script>
    <script type="text/javascript" src="ext/adapter/ext/ext-base.js"></script>
    <script type="text/javascript" src="ext/ext-all.js"></script>
    <script type="text/javascript" src="ext-lang-zh_CN.js"></script>
    <script type="text/javascript" src="js/loadIndex.js"></script>
</head>
<body>
    <div id="main_container">
        <div id="header">
            <div class="top_right">
                <div class="languages">
                    <div class="lang_text">
                        Languages:
                    </div>
                    <a href="#" class="lang"><img src="images/en.gif" alt=""
                            title="" border="0" /> </a>
                    <a href="#" class="lang"><img src="images/de.gif" alt=""
                            title="" border="0" /> </a>
                </div>
                <div class="big_banner">
                    <a href="#"><img src="images/banner728.jpg" alt="" title=""
                            border="0" /> </a>
                </div>
            </div>
            <!-- Company Logo here -->
            <div id="logo">
                <s:iterator id="company" value="cpy">
                    <img src="images/<s:property value="logo"/>" />
                </s:iterator>
            </div>
        </div>

        <div id="main_content">
            <div id="menu_tab">
                <ul class="menu">
                    <li>
                        <a href="index.jsp" class="nav"> Home </a>
                    </li>
                    <li class="divider"></li>
                    <li>
                        <a href="#" class="nav">Products</a>
                    </li>
                    <li class="divider"></li>
                    <li>
                        <a href="#" class="nav">News</a>
                    </li>
                    <li class="divider"></li>
                    <li>
                        <a href="#" class="nav">My account</a>
                    </li>
                    <li class="divider"></li>
                    <li>
                        <a href="#" class="nav">Sign Up</a>
                    </li>
                    <li class="divider"></li>
                    <li>
                        <a href="contact.jsp" class="nav">Contact Us</a>
                    </li>
                </ul>
            </div>
            <!-- end of menu tab -->

            <div class="crumb_navigation">
                Navigation:
                <span class="current">Home</span>
            </div>

            <div class="left_content">
                <div class="title_box">
                    Shotcut
                </div>
                <ul class="left_menu">
                    <!-- Company quick link here -->
                    <li class="odd">
                        <!-- add tag # here -->
                        <a href="index.jsp#cpypic">Company Picture</a>
                    </li>
                    <li class="even">
                        <a href="index.jsp#cpydesc">EnterPrise Introduce</a>
                    </li>
                    <!-- Company detail shotcut -->
                    <s:iterator value="cpydetail" status="index">
                        <s:if test="#index.odd == true">
                            <li class="odd">
                        </s:if>
                        <s:else>
                            <li class="even">
                        </s:else>
                        <a href="loadindex.action?id=LiteonIT#<s:property value=" id"/>">
                            <s:property value="name" />
                    </s:iterator>
                </ul>

                <div class="title_box">
                    Newsletter
                </div>
                <div class="border_box">
                    <input type="text" name="newsletter" class="newsletter_input"
                        value="your email" />
                    <a href="#" class="join">subscribe</a>
                </div>
            </div>
            <!-- end of left content -->


            <div class="center_content">
                <div class="oferta">
                    <div class="oferta_details">
                        <!-- Company Name,Picture and Description here -->

                        <s:iterator value="cpy">

                            <div class="oferta_title">
                                Company Name
                            </div>
                            <div class="oferta_text_bold">
                                <s:property value="name" />
                            </div>

                            <div class="oferta_title">
                                Company Picture
                                <a name="cpypic"></a>
                            </div>
                            <div class="oferta_text">
                                <img src="images/<s:property value="picture"/>" width=540
                                    height=250 />
                            </div>


                            <div class="oferta_title">
                                Company Description
                                <a name="cpydesc"></a>
                            </div>
                            <div class="oferta_text">
                                <s:property value="description" />
                            </div>

                        </s:iterator>

                        <!-- Company Detail here -->

                        <s:iterator value="cpydetail">
                            <div class="oferta_title">
                                <s:property value="name" />
                                <a name="<s:property value="id" />"></a>
                            </div>
                            <div class="oferta_text">
                                <s:property value="value" />
                            </div>

                        </s:iterator>

                    </div>
                </div>
            </div>
            <!-- end of center content -->
            <div class="right_content">
                <div class="title_box">
                    Search
                </div>
                <div class="border_box">
                    <input type="text" name="newsletter" class="newsletter_input"
                        value="keyword" />
                    <a href="#" class="join">search</a>
                </div>
                <div class="title_box">
                    Friendly Link
                </div>
                <ul class="left_menu">
                    <s:iterator id="fl" value="friendlylink" status="index">
                        <s:if test="#index.odd == true">
                            <li class="odd">
                        </s:if>
                        <s:else>
                            <li class="even">
                        </s:else>
                        <a href="http://<s:property value="fl"/>"> <s:property
                                value="fl" /> </a>
                        </li>
                    </s:iterator>
                </ul>
            </div>

            <!-- end of right content -->


        </div>
        <!-- end of main content -->
        <div class="footer">
            <div class="left_footer">
                <img src="images/footer_logo.png" alt="" title="" width="89"
                    height="42" />
            </div>
            <div class="center_footer">
                Template name. All Rights Reserved 2009
                <br />
                <img src="images/payment.gif" alt="" title="" />
            </div>
            <div class="right_footer">
                <a href="index.jsp">home</a>
                <a href="details.jsp">about</a>
                <a href="details.jsp">sitemap</a>
                <a href="details.jsp">rss</a>
                <a href="contact.jsp">contact us</a>
            </div>
        </div>
        <!-- end of footer -->
    </div>
    <!-- end of main_container -->
</body>


[/code]

loadIndex.js:

[code="java"]
Ext.onReady(function() {
Ext.Ajax.request({
url : 'loadindex.action?id=LiteonIT'
});
});
[/code]

struts.xml:
[code="java"]
method="loadCompanyInfo">
/index.jsp

companyInfoAction:
[code="java"][/code]
public String loadCompanyInfo() {
this.setCpy(ci.getCompanyInfo(this.getId()));
this.setCpydetail(ci.getCompanyDetail(this.getId()));
this.setFriendlylink(ci.getFriendlyLink(this.getId()));
System.out.println("I am running");
return SUCCESS;
}
[/code]

访问index.jsp时可以看到System.out.println("I am running");执行了,firebug下也可以看到数据返回.
[b]问题补充:[/b]
index.jsp:

[code="xml"]
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<head>
    <title>Tools Shop</title>
    <link rel="stylesheet" type="text/css" href="css/style.css" />
    <script type="text/javascript" src="js/boxOver.js"></script>
    <script type="text/javascript" src="ext/adapter/ext/ext-base.js"></script>
    <script type="text/javascript" src="ext/ext-all.js"></script>
    <script type="text/javascript" src="ext-lang-zh_CN.js"></script>
    <script type="text/javascript" src="js/loadIndex.js"></script>
</head>
<body>
    <div id="main_container">
        <div id="header">
            <div class="top_right">
                <div class="languages">
                    <div class="lang_text">
                        Languages:
                    </div>
                    <a href="#" class="lang"><img src="images/en.gif" alt=""
                            title="" border="0" /> </a>
                    <a href="#" class="lang"><img src="images/de.gif" alt=""
                            title="" border="0" /> </a>
                </div>
                <div class="big_banner">
                    <a href="#"><img src="images/banner728.jpg" alt="" title=""
                            border="0" /> </a>
                </div>
            </div>
            <!-- Company Logo here -->
            <div id="logo">
                <s:iterator id="company" value="cpy">
                    <img src="images/<s:property value="logo"/>" />
                </s:iterator>
            </div>
        </div>

        <div id="main_content">
            <div id="menu_tab">
                <ul class="menu">
                    <li>
                        <a href="index.jsp" class="nav"> Home </a>
                    </li>
                    <li class="divider"></li>
                    <li>
                        <a href="#" class="nav">Products</a>
                    </li>
                    <li class="divider"></li>
                    <li>
                        <a href="#" class="nav">News</a>
                    </li>
                    <li class="divider"></li>
                    <li>
                        <a href="#" class="nav">My account</a>
                    </li>
                    <li class="divider"></li>
                    <li>
                        <a href="#" class="nav">Sign Up</a>
                    </li>
                    <li class="divider"></li>
                    <li>
                        <a href="contact.jsp" class="nav">Contact Us</a>
                    </li>
                </ul>
            </div>
            <!-- end of menu tab -->

            <div class="crumb_navigation">
                Navigation:
                <span class="current">Home</span>
            </div>

            <div class="left_content">
                <div class="title_box">
                    Shotcut
                </div>
                <ul class="left_menu">
                    <!-- Company quick link here -->
                    <li class="odd">
                        <!-- add tag # here -->
                        <a href="index.jsp#cpypic">Company Picture</a>
                    </li>
                    <li class="even">
                        <a href="index.jsp#cpydesc">EnterPrise Introduce</a>
                    </li>
                    <!-- Company detail shotcut -->
                    <s:iterator value="cpydetail" status="index">
                        <s:if test="#index.odd == true">
                            <li class="odd">
                        </s:if>
                        <s:else>
                            <li class="even">
                        </s:else>
                        <a href="loadindex.action?id=LiteonIT#<s:property value=" id"/>">
                            <s:property value="name" />
                    </s:iterator>
                </ul>

                <div class="title_box">
                    Newsletter
                </div>
                <div class="border_box">
                    <input type="text" name="newsletter" class="newsletter_input"
                        value="your email" />
                    <a href="#" class="join">subscribe</a>
                </div>
            </div>
            <!-- end of left content -->


            <div class="center_content">
                <div class="oferta">
                    <div class="oferta_details">
                        <!-- Company Name,Picture and Description here -->

                        <s:iterator value="cpy">

                            <div class="oferta_title">
                                Company Name
                            </div>
                            <div class="oferta_text_bold">
                                <s:property value="name" />
                            </div>
                            <div class="oferta_title">
                                Company Picture
                                <a name="cpypic"></a>
                            </div>
                            <div class="oferta_text">
                                <img src="images/<s:property value="picture"/>" width=540
                                    height=250 />
                            </div>
                            <div class="oferta_title">
                                Company Description
                                <a name="cpydesc"></a>
                            </div>
                            <div class="oferta_text">
                                <s:property value="description" />
                            </div>
                        </s:iterator>

                        <!-- Company Detail here -->
                        <s:iterator value="cpydetail">
                            <div class="oferta_title">
                                <s:property value="name" />
                                <a name="<s:property value="id" />"></a>
                            </div>
                            <div class="oferta_text">
                                <s:property value="value" />
                            </div>
                        </s:iterator>
                    </div>
                </div>
            </div>
            <!-- end of center content -->
            <div class="right_content">
                <div class="title_box">
                    Search
                </div>
                <div class="border_box">
                    <input type="text" name="newsletter" class="newsletter_input"
                        value="keyword" />
                    <a href="#" class="join">search</a>
                </div>
                <div class="title_box">
                    Friendly Link
                </div>
                <ul class="left_menu">
                    <s:iterator id="fl" value="friendlylink" status="index">
                        <s:if test="#index.odd == true">
                            <li class="odd">
                        </s:if>
                        <s:else>
                            <li class="even">
                        </s:else>
                        <a href="http://<s:property value="fl"/>"> <s:property
                                value="fl" /> </a>
                        </li>
                    </s:iterator>
                </ul>
            </div>

            <!-- end of right content -->


        </div>
        <!-- end of main content -->
        <div class="footer">
            <div class="left_footer">
                <img src="images/footer_logo.png" alt="" title="" width="89"
                    height="42" />
            </div>
            <div class="center_footer">
                Template name. All Rights Reserved 2009
                <br />
                <img src="images/payment.gif" alt="" title="" />
            </div>
            <div class="right_footer">
                <a href="index.jsp">home</a>
                <a href="details.jsp">about</a>
                <a href="details.jsp">sitemap</a>
                <a href="details.jsp">rss</a>
                <a href="contact.jsp">contact us</a>
            </div>
        </div>
        <!-- end of footer -->
    </div>
    <!-- end of main_container -->
</body>


[/code]
[b]问题补充:[/b]
index.jsp中
第150行开始用struts2标签获取数据库数据.
[b]问题补充:[/b]
loadIndex.js的内容如下

window.location.href = 'loadindex.action?id=xxxx';

这里是不是应该用ajax 请求啊,直接window.location.href 的话会重复执行,进入死循环.

放在

之前的话,
ExtJs识别不了吧?
[b]问题补充:[/b]
再次感谢lovewhzlq (CTO)大大的热心回复.

其实我现在就是用2个页面做的,一个configIndex.jsp,一个index.jsp.在configIndex中提交action,转到index.jsp.

之所以搞得这么麻烦,主要是为了避免用户直接通过地址栏访问index.jsp的时候出不来数据的问题.

现在问题其实已经解决了一大半拉.用ajax提交action后可以看到执行了一次,数据库数据返回也有,反而是struts2标签失效了,很纳闷.

[b]问题补充:[/b]
其实web程序对用户直接用地址访问页面的做法都比较难处理.不知道是否有好的方式避免掉这种问题.
[b]问题补充:[/b]
感谢energykey兄的回答,鄙视 得好.
也就是说,
ajax请求的返回,只能用response.responseText或者json来获取,
struts2标签是不行的了.它们是2条路的人.
因为ajax是异步的请求,
struts2走的路是A的话,ajax的请求走的是B?

  • 写回答

13条回答

  • wanghaolovezlq 2009-10-13 14:16
    关注

    那你可以设置过滤器嘛,拦截对index.jsp的请求,把它跳转到到action请求嘛

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(12条)

报告相同问题?

悬赏问题

  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?