FCPL-lt 2011-11-06 09:37 采纳率: 33.3%
浏览 248
已采纳

jsp自定义标签效率问题

[color=blue][size=large]我目前做的一个项目中有一个下拉框的问题。在不同页面下拉框的选项都可以在字典表中定义。
我在项目里写了一个简单的自定义下拉框。标签里选项取数据问题,代码如下。
还请各位指点下,这里面的效率问题。我这样写会不会有什么不妥的地方。尤其是执行sql那块。我是直接WebApplicationContextUtils这个类去得到jdbc的连接.这样会不会存在什么问题![/size][/color]

[code="java"]
public class DictTag extends TagSupport{
/*
* 选择框 id
/
private String id;
/

* 选择框 name
/
private String name;
/

* 选择框 通过下拉框value默认选中
/
private String selectValue;
/

* 选择框 通过下拉框文本默认选中
*/
private String selectText;

/*
 * 要显示字典中组的选项
 */
private String dictGroupId;
/*
 * 默认值
 */
private String defaultValue = "";
/*
 * 默认文本
 */
private String defaultText = "请选择";

public String getDefaultValue() {
    return defaultValue;
}
public void setDefaultValue(String defaultValue) {
    this.defaultValue = defaultValue;
}
public String getDefaultText() {
    return defaultText;
}
public void setDefaultText(String defaultText) {
    this.defaultText = defaultText;
}
public String getId() {
    return id;
}
public void setId(String id) {
    this.id = id;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getSelectValue() {
    return selectValue;
}
public void setSelectValue(String selectValue) {
    this.selectValue = selectValue;
}
public String getSelectText() {
    return selectText;
}
public void setSelectText(String selectText) {
    this.selectText = selectText;
}
public String getDictGroupId() {
    return dictGroupId;
}
public void setDictGroupId(String dictGroupId) {
    this.dictGroupId = dictGroupId;
}


/**
 * 标签加载开始
 */
@Override
public int doStartTag(){
    StringBuffer select = new StringBuffer();
    select.append("<select");
    /*
     * 给select加上id
     */
    if(id != null && !"".equals(id)) {
        select.append(" id='")  
              .append(id)   
              .append("'"); 
    }
    /*
     * 给select加上name
     */
    if(name != null && !"".equals(name)) {
        select.append(" name='")    
              .append(name) 
              .append("'"); 
    }
    select.append(">");
    if(dictGroupId != null && !"".equals(dictGroupId)) {
        /*
         * 查找字典表中的选项sql
         */
        String sql = "SELECT d.entry_value,d.entry_name FROM t_sys_dict d ,t_sys_dictgroup dg "
                    +"WHERE dg.dictgroup_id = ? AND d.dictgroup_id = dg.dictgroup_id ";
        Object[] args = {Integer.valueOf(dictGroupId)}; 
        select.append("<option value='");
        select.append(defaultValue);
        select.append("'>");
        select.append(defaultText);
        select.append("</option>");
        List list = new ArrayList();
        try {
            /*
             * 执行sql
             */
            org.springframework.jdbc.core.JdbcTemplate jdbc = (org.springframework.jdbc.core.JdbcTemplate)org.springframework.web.context.support.WebApplicationContextUtils.getWebApplicationContext(this.pageContext.getServletContext()).getBean("jdbcTemplate");
            list =  jdbc.queryForList(sql,args);
        } catch (Exception e1) {

        }
        if (list != null && list.size() > 0) {
            for (int i=0;i<list.size();i++) {
                Map map = (Map)list.get(i);
                String selectStatus = "";
                if(selectValue != null && !"".equals(selectValue) && selectValue.equals(map.get("entry_value").toString())) {
                    selectStatus = "selected='selected'";
                }
                if(selectText != null && !"".equals(selectText) && selectText.equals(map.get("entry_name").toString())) {
                    selectStatus = "selected='selected'";
                }
                select.append("<option value='");
                select.append(map.get("entry_value"));
                select.append("' ");
                select.append(selectStatus);
                select.append(">");
                select.append(map.get("entry_name"));
                select.append("</option>");
            }
        }
        JspWriter jsp = this.pageContext.getOut();
        try {
            jsp.print(select.toString());
        } catch (IOException e) {
            e.printStackTrace();
        }
    } else {
        select.append("<option value=''>");
        select.append("无下拉选项");
        select.append("</option>");
    }
    select.append("</select>");
    return SKIP_BODY;
}

}
[/code]

  • 写回答

2条回答 默认 最新

  • kidd3166 2011-11-08 17:30
    关注

    简单的话可以建个hashmap,将查询出来的数据放进去,下次就在这里取,不用查数据库了,当有CUD就更新下,因为字典的内容没有需求是不会怎样变的

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

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog