使用struts开发项目已经半年的时间了,因为记性不太好,在开发过程中,经常参考以前的代码,现整理几条自己平
时遇到的标签总结如下:
1.<s:radio />标签的使用:
<s:radio name="comicImage.highQuality" id="highQuality" theme="simple"
list="#{0:getText('comicImage.highQuality.true'),1:getText('comicImage.highQuality.false')}"
listKey="key" οnclick="selectAll();" listValue="value" value=“1”></s:radio>
此时,单选框组内第二个被默认选中,除设置“value”值与list的key相同外,也可设置”name“属性值与key相同,
当然,name和value都可以是ACTION里面已经赋值的参数,这样radio都可以实现默认选中。
2.<display:table>得到当前行数:
<%
int roww=0;
%>
<display:table name="comicImages" cellspacing="0" cellpadding="0" id="comicImage" class="table" export="false">
<%roww++;%>
<display:column escapeXml="false" sortable="false" titleKey="comicImage.imageId"
style="width: 8%">
${comicImage_rowNum}
</display:column>
</display:table>
comicImages即action得到的list对象集合, 如上,有两种方法可以得到当前行数,定义一个变量,每循环一行数值增1;
${comicImage_rowNum}也可以得到当前的行数;
3. <s:select>在普通表单页面
<s:select label="%{getText('comicImage.srouceType')}"
list="#{'0':getText('series.srouce.0'),'1':getText('series.srouce.1'),'2':getText('image.srouce.2')}"
listKey="key" listValue="value"
name="comicImage.srouceType" value="%{comicImage.srouceType}"/>
此时name和value的值都是表单对象传递过来的值,也可只写其中一个属性,实现下拉框默认选中;
4.<s:select>在<display:table>标签之内:
若<s:select>嵌在<display:table>标签中,上面“3”的方法就无法实现默认选中。name和value属性无法按以上方法得到值;
<s:select
list="#{'0':getText('image.srouceType.0'),'1':getText('image.srouceType.1'),'2':getText('image.srouceType.2')}"
listKey="key" listValue="value"
name="#attr.comicImage.srouceType" theme="simple"
οnchange="javascript:upCateOrType('%{#attr.comicImage.imageId}',this.options[this.options.selectedIndex].value,false);"/>
5.<s:bean> 调用java类,得到分类下拉框
(1) bean 代码:
public class CategoryData {
private static HashMap<Boolean, LinkedHashMap<Integer, String>> categorysByIsSeris =
new HashMap<Boolean, LinkedHashMap<Integer, String>>();
private static LinkedHashMap<Integer, String> categorysAll = new LinkedHashMap<Integer, String>();
private static List<ComicCategory> categoryList = new ArrayList<ComicCategory>();
static {
LinkedHashMap<Integer, String> categorys = new LinkedHashMap<Integer, String>();
LinkedHashMap<Integer, String> categorysIsSeris = new LinkedHashMap<Integer, String>();
ComicCategoryDao comicCategoryDao = (ComicCategoryDao) SpringBeanUtils.getInstance().getBean("comicCategoryDao");
List<ComicCategory> listIsSeris = comicCategoryDao.getListByIsSeries(true);
List<ComicCategory> list = comicCategoryDao.getListByIsSeries(false);
for (ComicCategory comic : listIsSeris) {
categorysIsSeris.put(comic.getCategoryId(), comic.getName());
categoryList.add(comic);
}
for (ComicCategory comic : list) {
categorys.put(comic.getCategoryId(), comic.getName());
categoryList.add(comic);
}
categorysAll.putAll(categorysIsSeris);
categorysAll.putAll(categorys);
categorysByIsSeris.put(false, categorys);
categorysByIsSeris.put(true, categorysIsSeris);
}
public static String getCategoryNameById(int cate_id) {
String name = categorysAll.get(cate_id);
return null == name ? "" : name;
}
//get category'id by index and isSeris
public static Integer getCateVal(int which, Boolean isSeris) {
if (which < 0)
return 0;
return (Integer) getCategoryMap(isSeris).keySet().toArray()[which];
}
//get category'id by index
public static Integer getCateVal(int which) {
if (which < 0)
return 0;
return (Integer) categorysAll.keySet().toArray()[which];
}
//get category'name by index and isSeris
public static String getCateName(int which, Boolean isSeris) {
String name = getCategoryMap(isSeris).get(getCateVal(which, isSeris));
return (null != name) ? name : "";
}
//get the category'name of all the category
public static String getCateName(int which) {
String name = categorysAll.get(getCateVal(which));
return (null != name) ? name : "";
}
//get category by isSeris
public static LinkedHashMap<Integer, String> getCategoryMap(Boolean isSeris) {
return categorysByIsSeris.get(isSeris);
}
//get category not by isSeris
public static LinkedHashMap<Integer, String> getCategoryMap() {
return categorysAll;
}
//get size by isSeris
public static int getSize(Boolean isSeris) {
return getCategoryMap(isSeris).size();
}
//get Size not by isSeris
public static int getSize() {
return categorysAll.size();
}
public static List<ComicCategory> getCategoryList(){
return categoryList;
}
public static LinkedHashMap<Integer, String> getSeriesCategoryMap() {
return categorysByIsSeris.get(true);
}
public static LinkedHashMap<Integer, String> getImageCategoryMap() {
return categorysByIsSeris.get(false);
}
}
(2)使用<s:bean>标签在<display:table>中:
<s:bean name="com.zongheng.comic.op.webapp.util.CategoryData" id="categoryData"/>
<s:select list="#categoryData.imageCategoryMap"
listKey="key" listValue="value"
name="#attr.comicImage.categoryId" theme="simple"
οnchange="javascript:upCateOrType('%{#attr.comicImage.imageId}',
this.options[this.options.selectedIndex].value,true);"/>
(3)使用java代码实现下拉框:
<select name="cateEvent" id="cateEvent" οnchange="javascript:upCateOrType(${comicImage.imageId},this.options[this.options.selectedIndex].value,true);" class="select">
<%
int CurrCate = ((List<ComicImage>)request.getAttribute("comicImages")).get(roww-1).getCategoryId();
for (int i = 0; i < CategoryData.getSize(false); i++) {
%>
<option value="<%=CategoryData.getCateVal(i,false)%>" <%
if (CategoryData.getCateVal(i, false) == CurrCate)
out.print("selected");
%> ><%=CategoryData.getCateName(i, false).substring(0,2)%>
</option>
<%
}
%>
</select>