window.open('blog/userManager/checkUser.jsp','','width=480,height=147'); 这种直接跳转checkUser.jsp
1<a href="userInfo_landOutUser.htm" class="a1">
或2<s:form action="userInfo_addUserInfo">
这两种跳转到UserInfoAction对应的方法(UserInfo_*),在struts.xml里:
<action name="userInfo_*" class="com.mr.webiter.UserInfoAction" method="{1}">
<result name="friend_query">/blog/userManager/friends_query.jsp</result>
</action>
<action name="blogMain_*" class="com.mr.webiter.BlogMainAction" method="{1}">
<result name="blogMain">/blog_main.jsp</result>
红色部分是说明BlogMainAction函数处理完返回的参数所对应的页面或是1、2跳转过来的要处理的页面
</action>
request.getSession().getServletContext().getRealPath("/" + account);
ObjectDao<ArticleInfo> objectDao= new ObjectDao<ArticleInfo>();
List<ArticleInfo> list = objectDao.queryList(hql);
以上代码代表把不同的Dao(对某个对象的操作集合)放入ObjectDao类里面操作(启动数据库连接、关闭数据库)并返回结果,好处是一个类可以处理多个Dao
<s:iterator value="%{#request.userCommned}" id="commned">
<tr align="center">
<td height="30" background="images/f_certer.gif"><a href="userInfo_goinUser.htm?account=<s:property value="#commned.account"/>" target="_blank"><s:property value="#commned.account"/></td>
</tr>
</s:iterator>在com.mr.webiter.BlogMainAction已经取得各个热门博客、推荐博客、热门文章等
1.<a href="userInfo_goinUser.htm?account=<s:property value="#commned.account"/>" target="_blank">这种跳转方式是携带“account”值跳转,然后经过“com.mr.webiter.BlogMainAction”处理,把该对象放入UserInfo,获取account值得方法是:UserInfo userInfo=(UserInfo)session.getAttribute("userInfo");所以从UserInfo获取即可,该方法在java方法内
2.另外一种方式获取这种值是:<s:hidden name="info_account" value="%{#session.userInfo.account}"/>该方法用于html页面内
3. <a href="userInfo_goinUser.htm?account=${sessionScope.account}" target="_blank" class="a1">跳转是用法
4.获取值value="%{#session.account}"这个是登录就有的,一直保存到会话结束
// 用户登录操作
request.getSession().setAttribute("account", user.getAccount());在java代码里,设置会话里的account值,是整个会话不变的,就是“好人”登录了,什么地方“好人”查看其它博客都不会改变,查看博客时是跳转值方式是:1
//用户个人管理模块
1.com.mr.webiter.UserInfoAction里:request.getSession().setAttribute("userInfo", userInfo);把登录的用户存储到会话,并取值名"userInfo",用法:
java代码:<s:set name="user" value="%{#request.userInfo}"/>
html里使用:<s:property value="#user.realname"/></td>
2.返回原本请求页面
<action name="userInfo_*" class="com.mr.webiter.UserInfoAction" method="{1}">
<result name="input">/blog/userManager/{1}.jsp</result>
<result name="success">/blog/userManager/{1}.jsp</result>
比如:要跳转userInfo_artType_query.htm时会先跳转到"com.mr.webiter.UserInfoAction"进行处理,返回success时会自动提取artType_query.jsp来返回
感悟1:关于提示消息显示方式
<result name="success">/blog/userManager/{1}.jsp</result> 是让处理完后的提示消息在原本请求页面上
如果跑去dealwith.jsp则通常是提示框显示提示消息,点击后回才回到原本请求页面
感悟2:关于success跳转到新界面
像上面的跳转就是跳转回原本请求页面(本来在显示)
对于还没显示过的“原本页面”呢?
href="photoInfo_photo_query.htm">相片查询
PhotoAction处理完后返回success值(根据struct.xml)后就是跳转到photo_query.jsp显示处理结果
感悟3:关于UserInfoAction里的userInfo
userInfo会把之前提交页面的控件值(控件的name要与UserInfo.java的相应的属性值同名)对应进类似于javabean里,然后就可以通过get获取了(userInfo.get***)。
感悟4:关于使用“对号入座”的Action多动作处理器
<a href="userInfo_phtType_query.htm">链接跳转
<s:form action="userInfo_phtType_query">表单提交跳转
<a href="blog/userManager/addUserInfo.jsp"这样的才是直接跳转
感悟5:关于在原本请求页面提示信息(重新返回时)
Html、jsp页面:
<s:fielderror><s:param value="%{'pht_type'}"/></s:fielderror>
Java:
this.addFieldError("pht_type", "您输入的相册类别重复,请重新输入!");
感悟6:关于修改删除同处一处理模块效率更高
<script language="javascript">
function openUpdateArt(type){
var hdc=window.open('blog/userManager/phtType_update.jsp?type='+type,'','width=480,height=147');
width=screen.width;
height=screen.height;
hdc.moveTo((width-480)/2,(height-147)/2);
}
</script>
<s:iterator value="%{#request.pht_types}" id="type" status="st">
<input value="<s:property value="type"/>"这个是用来显示值的 type="checkbox" name="type" class="button" id="chk_id">
<a style="cursor:hand; " onClick="openUpdateArt('<s:property value="type"/>')">这个是说明点击该文字段就携带”type”值跳转到以上函数<s:property value="type"/></a>
<s:if test="#st.count%5==0">
<br><br>
</s:if>
</s:iterator>
在java里获取一系列被勾上的值:String phtTypes[] = request.getParameterValues("type");
感悟7:获取该Dao的所有属性值并显示
java:
String account = (String) request.getSession().getAttribute(
"account");
hql = "from UserInfo where account = '" + account + "'";
objectDao = new ObjectDao<UserInfo>();
UserInfo userInfo = objectDao.queryFrom(hql);
request.setAttribute("userInfo", userInfo);
jsp:
<s:set name="userInfo" value="%{#request.userInfo}"/>
value="%{#userInfo.email}
感悟8:解决获取携带值乱码问题
try {
account = new String(account.getBytes("ISO8859_1"), "gb2312");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
感悟9:天无绝人之路,获取用户名“永远不变”
String account = (String) request.getSession().getAttribute("account");
感悟10:userInfo找不到某个get**
如果在java里:
String andress = userInfo.getAddress();
System.out.println(andress);
输出为null的话,肯定是之前提交的jsp表单(s:textfield之类的)的name不同于Modelde(*.hbm.xml)里的。
感悟11:往会话里存储数组
request.setAttribute("friends", friend.split(","));
感悟11:额外的手动效验如何显示
在java:this.addFieldError("password", " 您输入的密码有误!");
returnSUCCESS; 这样即可。