在前端頁面輸出後臺查詢出的表單數據/
1、需求
在後臺查詢到的數據,需要傳到前端的jsp頁面中進行顯示。
實現效果如下:
2、思路
1)前端點擊事件, 觸發事件, 調用Action 中的方法, 方法調用業務層的方法進行數據的查詢 , 業務層調用Dao 。
2)將後臺的Dao層查到的數據傳送到Action 的方法中, 通過 HttpServletRequest 將數據傳送到jsp, 然後利用 struts2.xml 進行頁面跳轉到目標顯示頁面
3)在頁面將標籤改爲 struts2 標籤,對需要顯示的表單 form 標籤調用迭代器循環輸出數據。
3、實現代碼
1)前端跳轉代碼:
<a href="${pageContext.request.contextPath}/sys/sysUserGroupAction_list.do" target="rightFrame">部門設置</a></li>
跳轉到Action 中的 list()方法 。 調用業務層的代碼,無條件查詢數據:
public String list(){
List <SysUserGroup>sysUserGroups= sysUserGroupService.findSysUserGroup();//調用業務層查詢
request.setAttribute("sysUserGroups", sysUserGroups);//將查詢到的數據傳入給前端頁面
System.out.println("sysUserGroups:"+sysUserGroups);
return "list";//返回目標頁面
}
2)業務層查詢
@Override
public List<SysUserGroup> findSysUserGroup() {
//組織查詢條件
String whereHql="";
List paramsList=new ArrayList<>();
Object[]params=paramsList.toArray();
LinkedHashMap<String , String> orderby=new LinkedHashMap<String ,String>();
orderby.put("o.name", "asc");
return sysUserGroupDao.findObjectByConditionWithNoPage(whereHql, params, orderby);
}
3)dao層
@Override
public List<T> findObjectByConditionWithNoPage(String whereHql,final Object[] params ,LinkedHashMap<String, String>orderby) {
//獲取hql語句select前半部分
String hql="select o from "+entityClass.getSimpleName()+" o where 1=1 ";
System.out.println("hql:"+hql);
if(StringUtils.isNotBlank(hql)){
hql+=whereHql;//加入接收到的where部分
}
System.out.println("hql:"+hql);
String orderbyStr=buildOrderBy(orderby);//寫一個方法組織orderby語句部分
hql+=orderbyStr;//加入接收到的orderby部分
System.out.println("hql "+hql);
final String fhql=hql;
//調用hibernate中的方法執行query語句
@SuppressWarnings("unchecked")
List list=(List<T>)this.getHibernateTemplate().execute(new HibernateCallback(){
@Override
public Object doInHibernate(Session session)throws HibernateException, SQLException {
Query query=session.createQuery(fhql);
if(params!=null&¶ms.length>0){
for(int i=0;i<params.length;i++)
query.setParameter(i, params[i]);
}
return query.list();
}
});
return list;
}
/**
* 組織排序條件
* @param orderby
* @return
*/
private String buildOrderBy(LinkedHashMap<String, String> orderby) {
StringBuffer buf=new StringBuffer("");
if(orderby!=null&&!orderby.isEmpty()){
buf.append(" order by ");
for(Map.Entry<String ,String >em :orderby.entrySet()){
buf.append(em.getKey()+" "+em.getValue()+",");
}
//去掉最後一個逗號
buf.deleteCharAt(buf.length()-1);
}
return buf.toString();
}
4)前端迭代輸出:
<s:if test="#request.sysUserGroups!=null#">
<s:iterator value="%{#request.sysUserGroups}" var="sysUserGroup">
<tr>
<td><input type="checkbox" name="ids" value="12"
class="checkbox" onClick="changeCheckCount();"></td>
<td><a
href="${pageContext.request.contextPath}/sys/sysUserGroupAction_edit.do"><s:property value="%{#sysUserGroup.name}"/></a></td>
<td><s:property value="%{#sysUserGroup.principal}"/></td>
<td><s:property value="%{#sysUserGroup.incumbent}"/></td>
<td><a
href="javascript:OpenWin('${pageContext.request.contextPath}/sys/group/usersInGroup.jsp?id=12')">設置</a></td>
</tr>
</s:iterator>
</s:if>