学习一段时间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自动处理
整理的比较粗造,希望能对大家有点有帮助.