学习一段时间GWT,想把我之前做的动态加载TreeList 总结一下
1 首先在GWT工程中要有一个Tree
final TreeGrid treeGrid = new TreeGrid(); EmployeeXmlDS employeesDS = EmployeeXmlDS.getInstance(); treeGrid.setWidth100(); treeGrid.setHeight100(); treeGrid.setDataSource(employeesDS); treeGrid.setAutoFetchData(true); treeGrid.setCanEdit(true); treeGrid.setCanAcceptDroppedRecords(true); TreeGridField nameField = new TreeGridField("name", 250); treeGrid.setFields(nameField);
2 建一个DataSource
import com.smartgwt.client.data.DataSource;
import com.smartgwt.client.data.fields.DataSourceTextField;
import com.smartgwt.client.types.DSDataFormat;
public class EmployeeXmlDS extends DataSource {
private static EmployeeXmlDS instance = null;
public static EmployeeXmlDS getInstance() {
if (instance == null) {
instance = new EmployeeXmlDS("employeesDS");
}
return instance;
}
public EmployeeXmlDS(String id) {
setID(id);
setTitleField("name");
setDataFormat(DSDataFormat.JSON);
DataSourceTextField nameField = new DataSourceTextField("name", "name", 128);
DataSourceTextField employeeIdField = new DataSourceTextField("treeId", "treeId",30);
employeeIdField.setPrimaryKey(true);
employeeIdField.setRequired(true);
DataSourceTextField reportsToField = new DataSourceTextField("upid","upid",50);
reportsToField.setRequired(true);
reportsToField.setForeignKey(id+".treeId");
reportsToField.setRootValue("root");
setFields(nameField, employeeIdField, reportsToField);
setDataURL("/analysis/jsonStockData");//URL路径, web url-pattern
}
}
3 建一个servlet
import java.io.IOException; import java.io.PrintWriter; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; import com.framedsoa.core.util.DateUtil; import com.framedsoa.dao.DictionaryDao; import com.framedsoa.model.Dictionary; @Service @Transactional public class JsonStockData extends HttpServlet { protected final Log log = LogFactory.getLog(getClass()); @Autowired DictionaryDao dictionaryDao; private static final long serialVersionUID = 1L; /** * 动态加载 * */ private DictionaryDao getDictionaryDao(){ if(null==dictionaryDao){ dictionaryDao=(DictionaryDao) getBean("dictionaryDaoJpa"); } return dictionaryDao; } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String treeId=req.getParameter("treeId"); String treeName=req.getParameter("name"); String treeUpid=req.getParameter("upid"); String param=req.getParameter("p"); log.info("↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓"); log.info("参数表 :treeId=" + treeId+",param= "+param+",treeName="+treeName+",treeUpid="+treeUpid); if("add".equals(param)){ add(req,resp); return ; } if(treeId!=null && null==treeUpid && treeName ==null){ remove(req,resp); return ; } if(null!=treeUpid&&treeId==null && treeName ==null){ search(req,resp); return ; } if(treeId!=null && treeName!=null && null==treeUpid){ edit(req,resp); return ; } if(treeId!=null && treeName!=null && null!=treeUpid){ drag(req,resp); return ; } } protected Object getBean(String name) { WebApplicationContext applicationContext = WebApplicationContextUtils .getWebApplicationContext(getServletContext()); if (applicationContext == null) { throw new IllegalStateException("No Spring web application context found"); } if (!applicationContext.containsBean(name)) { { throw new IllegalArgumentException("Spring bean not found: " + name); } } return applicationContext.getBean(name); } @Transactional private void add(HttpServletRequest req, HttpServletResponse resp){ PrintWriter out = null; String mgs = "添加成功"; String treeId = ""; String treeNo = req.getParameter("no"); String treeName = req.getParameter("name"); String treeUpid = req.getParameter("upid"); String adddigorder = req.getParameter("digorder"); try { resp.setCharacterEncoding("UTF-8"); out = resp.getWriter(); Dictionary bean = new Dictionary(); bean.setNo(treeNo); bean.setName(treeName); bean.setUpid(treeUpid); bean.setDigorder(Long.valueOf(adddigorder)); bean.setFcreateTime(DateUtil.getSysNowDate()); bean.setFcreatorID("0"); bean.setFstate("0"); getDictionaryDao().save(bean); treeId =bean.getId(); } catch (Exception e) { mgs="添加失败"; } finally { out.println("[{"); out.println("\"mgs\":\"" + mgs + "\","); out.println("\"treeId\":\"" + treeId + "\","); out.println("\"name\":\"" + treeName + "\","); out.println("\"upid\":\"" + treeUpid + "\","); out.println("\"no\":\"" + treeNo + "\""); out.println("}]"); out.flush(); } } @Transactional private void remove(HttpServletRequest req, HttpServletResponse resp){ PrintWriter out = null; String mgs = "删除成功"; String treeId=""; String treeName=""; String treeUpid=""; try { resp.setCharacterEncoding("UTF-8"); out = resp.getWriter(); treeId=req.getParameter("treeId"); log.info("删除:treeId=" + treeId); Dictionary bean = getDictionaryDao().get(treeId); bean.setFlastUpdateTime(DateUtil.getSysNowDate()); bean.setFlastUpdateUserID("0"); bean.setFstate("1"); treeName=bean.getName(); treeUpid=bean.getUpid(); getDictionaryDao().save(bean); } catch (Exception e) { log.error("", e); mgs="删除失败"; }finally{ out.println("[{"); out.println("\"mgs\":\""+mgs+"\","); out.println("\"treeId\":\"" + treeId + "\","); out.println("\"name\":\"" + treeName + "\","); out.println("\"upid\":\"" + treeUpid + "\""); out.println("}]"); out.flush(); } } private void search(HttpServletRequest req, HttpServletResponse resp) { PrintWriter out = null; try { resp.setCharacterEncoding("UTF-8"); out = resp.getWriter(); String upid = req.getParameter("upid"); upid = "root".equals(upid) ? "-11" : upid; log.info("查询:upid=" + upid ); List<Dictionary> dicList = getDictionaryDao().getDictionaryByUpid(upid); if (null == dicList) { out.println("[]"); out.flush(); return; } out.println("["); int i = 0; int size = dicList.size(); for (Dictionary bean : dicList) { String treeid = bean.getId(); String treeName = bean.getName(); String treeUpid = bean.getUpid(); String treeNo = bean.getNo(); out.println("{"); out.println("\"treeId\":\"" + treeid + "\","); out.println("\"name\":\"" + treeName + "\","); out.println("\"upid\":\"" + treeUpid + "\","); out.println("\"no\":\"" + treeNo + "\""); if ((i++) != size - 1) { out.println("},"); } else { out.println("}"); } } out.println("]"); out.flush(); } catch (Exception e) { log.error("",e); } } @Transactional private void edit(HttpServletRequest req, HttpServletResponse resp) { PrintWriter out = null; try { resp.setCharacterEncoding("UTF-8"); out = resp.getWriter(); String treeId = req.getParameter("treeId"); String treeName = req.getParameter("name"); log.info("修改:treeId=" + treeId + ",treeName=" + treeName); Dictionary bean = getDictionaryDao().get(treeId); bean.setName(treeName); bean.setFlastUpdateTime(DateUtil.getSysNowDate()); bean.setFlastUpdateUserID("0"); getDictionaryDao().save(bean); out.println("[]"); out.flush(); } catch (Exception e) { log.error("", e); } } @Transactional private void drag(HttpServletRequest req, HttpServletResponse resp) { PrintWriter out = null; try { resp.setCharacterEncoding("UTF-8"); out = resp.getWriter(); String treeId = req.getParameter("treeId"); String treeName = req.getParameter("name"); String treeUpid = req.getParameter("upid"); log.info("拖动:treeId="+treeId+", name="+treeName+",upid="+treeUpid); Dictionary bean = getDictionaryDao().get(treeId); bean.setUpid(treeUpid); bean.setFlastUpdateTime(DateUtil.getSysNowDate()); bean.setFlastUpdateUserID("0"); getDictionaryDao().save(bean); } catch (Exception e) { log.error("", e); } finally{ out.println("[]"); out.flush(); } } }
4 web.xml
<servlet> <servlet-name>jsonStockData</servlet-name> <servlet-class>com.hblb.app.server.services.JsonStockData</servlet-class> </servlet> <servlet-mapping> <servlet-name>jsonStockData</servlet-name> <url-pattern>/analysis/jsonStockData</url-pattern> </servlet-mapping>
5 增加记录
Record record = new Record(); record.setAttribute("p", "add"); record.setAttribute("treeId", idTextItem.getDisplayValue()); record.setAttribute("no", noTextItem.getDisplayValue()); record.setAttribute("name", nameTextItem.getDisplayValue()); record.setAttribute("upid", upidTextItem.getDisplayValue()); record.setAttribute("digorder", digorderTextItem.getDisplayValue()); EmployeeXmlDS.getInstance().addData(record, new CbSave());
class CbSave implements DSCallback { @Override public void execute(DSResponse response, Object rawData, DSRequest request) { Record[] record =response.getData(); String mgs =record[0].getAttribute("mgs"); EmployeeXmlDS.getInstance().updateData(record[0]); SC.say(mgs); } }
删除记录
Record record = treeGrid.getSelectedRecord(); if (record == null) { SC.say("请选择一条记录。"); return; } String treedName = record.getAttribute("name"); SC.confirm("删除对话框", "确定要删除" + treedName + "吗?", new ChRemove()); /////////////////////////// class ChRemove implements BooleanCallback { @Override public void execute(Boolean value) { if (value) { Record record = treeGrid.getSelectedRecord(); EmployeeXmlDS.getInstance().removeData(record, new CbRemove()); } } }
修改,查询Grid自动处理
整理的比较粗造,希望能对大家有点有帮助.
相关推荐
通过以上步骤,我们可以实现EasyUI TreeGrid组件根据查询条件动态加载数据的功能。这种方式避免了对`treegrid('reload')`方法的直接依赖,同时也符合异步数据处理的最佳实践。在实际开发中,根据项目需求,你可能还...
treegrid动态加载tree级联更新下拉列表,保存让下拉列表显示名称,不是id,和动态计算数量乘以单价的和,和总合计,添加一列删除一列,撤回,保存的合计。
TreeGrid是WPF中的一个高级控件,它结合了树视图(TreeView)和数据网格(DataGrid)的功能,使得我们可以展示层次结构的数据,并且能够对这些数据进行编辑、排序和筛选。我们将基于“treegrid.zip”这个压缩包中的...
在ASP.NET页面中,我们可以通过AJAX异步加载数据,使用JavaScript处理动态添加、删除和编辑节点。例如,使用jQuery UI的`nestedSortable`插件可以创建可排序的树形表格。 实现步骤: 1. **设计HTML和服务器端控件*...
`TreeGrid`的一个重要特性是支持异步加载数据。这意味着当用户展开某个节点时,该节点下的子节点才会被请求并加载到界面上。这种方式能够显著提高应用的性能和响应速度,特别是在处理大量数据时更为明显。 #### 三...
在TreeGrid中,AJAX通常用于从服务器动态获取数据,当用户展开节点时,仅加载必要的子数据,而不是一次性加载整个数据集。这种按需加载的方式可以显著提高页面性能,尤其是处理大数据集时。 在提供的文件列表中,...
这意味着当用户首次访问树形视图时,只会加载根节点,当用户展开某个节点时,该节点的子节点才会在后台请求数据并动态添加到视图中。这样,即使树结构包含数千个节点,也不会对初始页面加载时间造成太大影响。 实现...
2. 懒加载策略:TreeGrid中的懒加载是指在用户展开节点时才加载该节点下的子数据,而不是一次性加载所有数据。这样可以避免初次加载时的数据量过大,提高初始渲染速度。当用户滚动或展开新节点时,后台动态获取并...
- 数据加载:可以通过异步请求或直接传入数据来填充TreeGrid。异步请求时,通常采用layui的layData方法配合layui的API进行数据获取和渲染。 4. TreeGrid主要属性和方法: - id:TreeGrid的容器ID,用于指定表格...
在动态加载的场景下,Treegrid可以从服务器获取数据并在用户滚动或展开节点时按需加载,从而提高页面性能和用户体验。 在提供的代码示例中,我们看到Treegrid的配置和使用方法。首先,通过jQuery的$(function() {})...
这种组件能够动态加载子级节点,即当用户展开某个父节点时,才会请求服务器获取并显示该父节点下的子节点数据,以提高页面加载速度和用户体验。 "很实用的treegrid"标题表明这是一个在实际应用中表现出色的TreeGrid...
TreeStore是ExtJS中的一个数据存储类,它负责加载和管理树形数据。你需要定义数据模型(Model),包含节点的属性,以及数据源(store configuration),这可以是JSON对象数组或者其他格式的数据。例如: ```...
这意味着数据可以从服务器获取,也可以通过本地JSON文件如`treedata.json`动态加载。这种方式的优点是数据更新实时性强,可以轻松应对大规模、实时变化的数据。同时,数据结构的定义也更加清晰,便于后台处理和前端...
3. 动态加载:当数据量较大时,TreeGrid支持懒加载,即只在需要时才请求并加载子节点。这通常通过配置`onBeforeOpen`事件来实现,当用户展开一个节点时,该事件会被触发,此时可以异步获取子节点数据并添加到...
总的来说,"GridView+Jquery实现的TreeGrid"是一个结合了前后端技术,实现高效、动态的数据展示的实例。它利用了GridView的表格布局和JQuery的灵活性,提供了用户友好的树状数据浏览体验。在实际项目中,可以根据...
4. **数据绑定**:TreeGrid.js可以轻松地与各种数据源(如JSON、XML或AJAX)结合,动态加载和更新表格内容。用户只需配置数据源的URL和格式,插件会自动处理数据解析和渲染。 5. **排序功能**:用户可以对表格中的...
2. **数据绑定**:该组件支持多种数据源,包括JSON、XML、CSV等格式,可以通过Ajax方式动态加载数据,也可以一次性加载所有数据。这使得dhtmlxTreeGrid能够灵活处理各种规模的数据集。 3. **功能丰富**:除了基本的...
在实际项目中,根据需求可以调整Treegrid的样式,定制图标以表示展开和折叠状态,也可以通过JavaScript进行交互逻辑的增强,如懒加载子级数据以优化性能。总之,BootstrapTable Treegrid是一个强大且灵活的工具,它...
2. **数据绑定**:dhtmlxTreeGrid支持从XML、JSON等数据源动态加载和绑定数据,这使得它能适应各种后端数据库和数据格式。 3. **可定制性**:用户可以通过CSS自定义组件的外观,通过JavaScript调整其行为,以满足...
数据增加属性 state:closed, 即可默认收起,反之展开,需再展开时,将加载的data数据中的state属性变更,再重新执行 $('#tg').treegrid('loadData', data); 即可实现,亲测有效 无卡顿 注:无子项的请勿加state...