自己用ssh框架写了个小项目中的一些总结

最近自己在用ssh框架来写了个小的时间线项目。类似于QQ空间的说说功能,能log想发的一些心情。期间遇到不少关于取值的问题,在这里记录下来。首先我想说,用了jquery jsp strut2的标签来处理前台感觉相当的麻烦。使用过angularjs的我来说简直是要命了,用angularjs操作数据是相当的方便,语法也相对容易。闲话不说了开始总结

1,提交表单后页面刷新了,查询条件没保存的问题

在做list页面的时候,当时还是选择用按钮submit action,这个提交方式会刷新整个页面,提交后你的search condition就没得了,我首相想到用ajax去请求后台数据(这是很笨的方法,后来也没有实现),问题又出来了,怎么取到ajax返回的数据呢?ajax需要返回的是json格式的数据。strut2 action的方法一般都是返回的某个视图。网上查找后发现strut2可以支持把方法中的对象,list等自动序列化成json的格式(要引入包,具体过程不说了,有点曲折,期间又有一些包冲突的问题,都是泪),然后直接在success中拿到,但是拿到后又没法传给这个标签遍历,这个标签是直接去值栈中的数据的。最后才发现,我采用的是表达式封装提交查询表单数据的,其实这个数据是直接被存入了request的作用域了,这里可以直接在jsp中这样的方式就可以取出来,说明我一开始去解决这个问题的方向都弄错了,也浪费我了一些时间。好在还是解决了。
下面说说针对select和input标签提交后怎么存储表单值。
select:

<label for="name">姓名</label> 
<select class="form-control" name="searchVO.username" value="<s:property value="searchVO.username"/>">
   <option value="">请选择姓名</option>
    <s:iterator value="listUsername" id="username"> 
        <option value="<s:property />" 
        <s:if test="#username==#request.searchVO.username">selected="selected"</s:if>>
        <s:property /></option>

</s:iterator>
</select>

用ognl表达式#request.searchVO.username得到刚刚提交的值与循环出来的username值做比较,如果相等就选中。
input:

<div class="col-xs-12 col-sm-6 col-md-3">
                <div class="form-group">
                    <label for="name">内容</label> <input type="text" 
                        class="form-control" id="content" name="searchVO.content" value="<s:property value="searchVO.content"/>"
                        placeholder="请输入内容">
                </div>
            </div>

value=””这样写去去刚刚提交的内容。这样就基本解决了我的list页面提交表单刷新后没有保存值的问题了。

2,还有取值方面的一些语法,ognl的使用。

这个也是比较打脑壳的,反正我就是感觉strut很不好用感觉很快会被淘汰。我直接把代码贴在下面:

<tr align="center">
                    <td>
                    <td colspan="6"><s:a href="timeLine_pagination.action?curpage=1">首页</s:a>
                        <s:a href="timeLine_pagination.action?curpage=%{#request.prepage}">上页</s:a> <s:a
                        href="timeLine_pagination.action?curpage=%{#request.nextpage}">下页</s:a> <s:a
                        href="timeLine_pagination.action?curpage=%{#request.lastpage}">尾页</s:a> 当前第<s:property
                            value="#request.curpage" />页,总共<s:property value="#request.lastpage" />页,<s:property value="#request.total" />条记录</td>
                </tr>

<img class="timeline_t" alt="" src="<s:property value="#session.imagepath" />">

<s:a href="timeLine_deleteTimeLineById.action?userId=%{userId}">
                            <button type="button" id="deleteTimeLine" onclick="return window.confirm('这将删除本条宿舍信息,你确定要删除吗?')"
                                class="btn btn-info btn-search">删除</button>
                        </s:a>

3,遍历list

3.1 List遍历

<s:iterator value="listUsername" id="username">           
    <option value="<s:property />" 
    <s:if test="#username==#request.searchVO.username">selected="selected"</s:if>><s:property />
    </option>

</s:iterator>

3.2 遍历List

<%--List<String>遍历--%>
                    <table width="242" height="256" border="1" cellpadding="1"
                        cellspacing="1">
                        <caption>
                            List&ltString&gt遍历
                        </caption>
                        <tr>
                            <%--
                        说明:<s:iterator id="别名" value="后台List变量名">
                              <s:if test="#别名!=null">
                            --%>
                            <s:iterator id="li" value="list">
                                <td>
                                    <s:if test="#li!=null">
                                        <s:property />
                                    </s:if>
                                </td>
                            </s:iterator>
                        </tr>
                    </table>

4,action类配置成了单例带来的问题。

struts2和spring整合后,使用spring注解@Controller(“userAction”)来为action类创建对象,spring ioc容器中如果没有申明创建对象的作用域就默认为是Singleton的,但是在struts2中的action应该要是多例的,也就是说一次request对应一个action实例。
如果是单例的话,我提交的表单中的数据就会保存在这个action类对象中,当你下一次请求这个action类,还是返回同一个对象,如果这是你在另外一个浏览器登录进来,就会看到你现在的search condition出现在jsp页面上面。
我先在firefox上面search
这里写图片描述

然后再用IE登录后出现下面的页面:

这里写图片描述
可以看到一登录进来我在firefox的search condition就出来了。

解决办法如下图,配置成多例。

这里写图片描述

带来的思考:如果是多例的话会有线程安全问题,多线程环境下访问数据会出现问题。(未完待续)

多总结才会有提高。有不对的地方也欢迎留言告诉我。谢谢!

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值