builddocstructviewtag.java
来自「Java的框架」· Java 代码 · 共 328 行
JAVA
328 行
package mcaps.core.docman.webapp.taglib;
import java.util.List;
import java.util.ResourceBundle;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;
import org.springframework.web.util.ExpressionEvaluationUtils;
import mcap.core.docman.model.FileObject;
import mcap.core.docman.model.FolderObject;
/**
* Tag for building a document structure view
*
* @author Chan Chin Wei
* @date May 4, 2006
* @version 1.0.1.0
*/
public class BuildDocStructViewTag extends TagSupport {
/**
*
*/
private static final long serialVersionUID = -6101480289391067419L;
private String folder;
private FolderObject folderObj;
private boolean showFile = false;
private boolean expandAll = false;
private String anyOnClickFn;
private String folderOnClickFn;
private String fileOnClickFn;
private String cImg = "/images/dm_dsv_collapse.gif";
private String eImg = "/images/dm_dsv_expand.gif";
private String foImg = "/images/dm_dsv_folderOpen.gif";
private String fcImg = "/images/dm_dsv_folderClose.gif";
public void setFolder(Object folder) {
if (folder instanceof FolderObject)
this.folderObj = (FolderObject) folder;
else
this.folder = (String) folder;
}
public void setShowFile(String showFile) {
if (showFile != null && showFile.equalsIgnoreCase("true"))
this.showFile = true;
}
public void setExpandAll(boolean expandAll) {
this.expandAll = expandAll;
}
public void setAnyOnClickFn(String anyOnClickFn) {
this.anyOnClickFn = anyOnClickFn;
}
public void setFileOnClickFn(String fileOnClickFn) {
this.fileOnClickFn = fileOnClickFn;
}
public void setFolderOnClickFn(String folderOnClickFn) {
this.folderOnClickFn = folderOnClickFn;
}
/**
* Process the start of this tag.
* @return
* @exception JspException if a JSP exception has occurred
* @see javax.servlet.jsp.tagext.Tag#doStartTag()
*/
public int doStartTag () throws JspException {
JspWriter out = pageContext.getOut ();
//get folder object from EL expressions
if (folderObj == null && folder != null && !folder.equals("")) {
folderObj = (FolderObject) ExpressionEvaluationUtils
.evaluate ("folder", folder, FolderObject.class, pageContext);
}
if (folderObj != null) {
try {
out.println(constructView ());
}
catch (java.io.IOException e) {
throw new JspException ("Unable to output result.");
}
}
return (SKIP_BODY);
}
public int doEndTag () {
release();
return (SKIP_BODY);
}
public void release () {
folder = null;
folderObj = null;;
showFile = false;
expandAll = false;
anyOnClickFn = null;
folderOnClickFn = null;
fileOnClickFn = null;
}
private StringBuffer constructView () {
HttpServletRequest req = (HttpServletRequest) pageContext.getRequest();
String contextPath = req.getContextPath();
ResourceBundle resource = ResourceBundle.getBundle("ApplicationResources", req.getLocale());
//preparing javascript
StringBuffer buf = new StringBuffer ("<script language=\"JavaScript\">");
buf.append("\nvar docman_docPathSelected = \"\";");
buf.append("\nvar docman_docTypeSelected = \"\";");
buf.append("\nvar docman_elemSelected = \"\";");
buf.append("\nfunction collapseExpand(idNo) {");
buf.append("\nvar imgElem = document.getElementById(\"img\" + idNo);");
buf.append("\nvar imgFElem = document.getElementById(\"imgF\" + idNo);");
buf.append("\nvar divElem = document.getElementById(\"div\" + idNo);");
buf.append("\nif (divElem.style.display == \"none\") {");
buf.append("\nimgElem.src=\"").append(contextPath).append(eImg).append("\";");
buf.append("\nimgFElem.src=\"").append(contextPath).append(foImg).append("\";");
buf.append("\ndivElem.style.display='';");
buf.append("\n}");
buf.append("\nelse{");
buf.append("\nimgElem.src=\"").append(contextPath).append(cImg).append("\";");
buf.append("\nimgFElem.src=\"").append(contextPath).append(fcImg).append("\";");
buf.append("\ndivElem.style.display=\"none\";");
buf.append("\n}");
buf.append("\n}");
buf.append("\n");
buf.append("\nfunction docman_hasSelection() {");
buf.append("\nif (docman_elemSelected == null || docman_elemSelected == '')");
buf.append("\nreturn false;");
buf.append("\nreturn true;");
buf.append("\n}");
buf.append("\n");
buf.append("\nfunction docman_getSelected() {");
buf.append("\nreturn docman_docPathSelected;");
buf.append("\n}");
buf.append("\n");
buf.append("\nfunction docman_getSelectedType() {");
buf.append("\nreturn docman_docTypeSelected;");
buf.append("\n}");
buf.append("\n");
buf.append("\nfunction docman_anyOnClickFn (idNo) {");
buf.append("\nvar spanElem = document.getElementById(\"span\" + docman_elemSelected);");
buf.append("\nif (spanElem != null && spanElem != '')");
buf.append("\nspanElem.style.backgroundColor='';");
buf.append("\ndocman_elemSelected = idNo;");
buf.append("\nspanElem = document.getElementById(\"span\" + idNo);");
buf.append("\nspanElem.style.backgroundColor='#E1FFFF';");
buf.append("\n");
if (anyOnClickFn != null && ! anyOnClickFn.equals(""))
buf.append("\n").append(anyOnClickFn);
buf.append("\n}");
buf.append("\n");
buf.append("\nfunction docman_folderOnClickFn (idNo) {");
if (folderOnClickFn != null && ! folderOnClickFn.equals(""))
buf.append("\n").append(folderOnClickFn);
buf.append("\ndocman_anyOnClickFn(idNo);");
buf.append("\ndocman_docTypeSelected = \"Folder\";");
buf.append("\n}");
buf.append("\n");
buf.append("\nfunction docman_fileOnClickFn (idNo) {");
if (fileOnClickFn != null && ! fileOnClickFn.equals(""))
buf.append("\n").append(fileOnClickFn);
buf.append("\ndocman_anyOnClickFn(idNo);");
buf.append("\ndocman_docTypeSelected = \"File\";");
buf.append("\n}");
buf.append("\n");
buf.append("\nfunction docman_highlightFile (path) {");
buf.append("\nvar pathId = document.getElementById (\"dFP_\" + path);");
buf.append("\nif (pathId != null) {");
buf.append("\nidNo=pathId.value;");
buf.append("\ndocman_anyOnClickFn(idNo);");
buf.append("\nvar divPId = document.getElementById (\"PF_\" + path);");
buf.append("\nwhile (divPId != null) {");
buf.append("\nvar pIdNo=divPId.value;");
buf.append("\nvar imgElem = document.getElementById(\"img\" + pIdNo);");
buf.append("\nvar imgFElem = document.getElementById(\"imgF\" + pIdNo);");
buf.append("\nvar divElem = document.getElementById(\"div\" + pIdNo);");
buf.append("\nif (divElem.style.display == \"none\") {");
buf.append("\nimgElem.src=\"").append(contextPath).append(eImg).append("\";");
buf.append("\nimgFElem.src=\"").append(contextPath).append(foImg).append("\";");
buf.append("\ndivElem.style.display='';");
buf.append("\n}");
buf.append("\ndivPId = document.getElementById (\"PF_\" + pIdNo);");
buf.append("\n}");
buf.append("\n}");
buf.append("\nelse");
buf.append("\nalert (\"Unable to locate the file.\");");
buf.append("\n}");
buf.append("\n");
buf.append("\n</script>");
//printing root folder.
buf.append("\n<table border=\"0\" cellpadding=\"0\" cellspacing=\"2\" width=\"100%\" align=\"center\">");
buf.append("\n<tr>");
buf.append("\n<td align=\"left\">");
buf.append("\n<img id=\"imgRoot\" src=\"").append(contextPath);
if (expandAll)
buf.append(eImg);
else
buf.append(cImg);
buf.append("\" onClick=\"javascript:collapseExpand('Root')\">");
buf.append("\n<span id=\"spanRoot\" onClick=\"javascript:docman_docPathSelected='").append(folderObj.getFolderPath());
buf.append("';docman_folderOnClickFn('Root');\" style=\"cursor:hand\">");
buf.append("<img id=\"imgFRoot\" src=\"").append(contextPath);
if (expandAll)
buf.append(foImg);
else
buf.append(fcImg);
buf.append("\">root</span>");
buf.append("\n<div id=\"divRoot\"");
if (!expandAll)
buf.append(" style=\"display:none\"");
buf.append(">");
//printing subfolder(s)
genFolderContents (buf, folderObj, contextPath, resource, "Root", 1);
buf.append("\n</div>");
buf.append("\n</td>");
buf.append("\n</tr>");
buf.append("</table>");
return buf;
}
private void genFolderContents (StringBuffer buf, FolderObject folderObj, String contextPath, ResourceBundle resource, String parentId, int level) {
List folderList = folderObj.getFolderList();
buf.append("\n<table border=\"0\" cellpadding=\"0\" cellspacing=\"2\" width=\"100%\" align=\"center\">");
if (folderList != null) {
for (int i = 0; i < folderList.size(); i++) {
String thisFolderId = "L" + parentId + level + "N" + i;
FolderObject subFolder = (FolderObject) folderList.get(i);
buf.append("\n<tr>");
buf.append("\n<td align=\"left\">");
genSpaces (buf, level);
buf.append("\n<img id=\"img").append(thisFolderId);
buf.append("\" src=\"").append(contextPath);
if (expandAll)
buf.append(eImg);
else
buf.append(cImg);
buf.append("\" onClick=\"javascript:collapseExpand('");
buf.append(thisFolderId).append("')\">");
buf.append("\n<span id=\"span").append(thisFolderId);
buf.append("\" onClick=\"javascript:docman_docPathSelected='").append(subFolder.getFolderPath());
buf.append("';docman_folderOnClickFn('").append(thisFolderId);
buf.append("');\" style=\"cursor:hand\">");
buf.append("<img id=\"imgF").append(thisFolderId);
buf.append("\" src=\"").append(contextPath);
if (expandAll)
buf.append(foImg);
else
buf.append(fcImg);
buf.append("\">").append(subFolder.getName());
//for jameleon test tools
buf.append("<span id=\"").append(subFolder.getFolderPath().replaceAll("/", "_")).append("\">").append("</span>");
buf.append("</span>");
buf.append("\n<div id=\"div").append(thisFolderId);
buf.append("\"");
if (!expandAll)
buf.append(" style=\"display:none\"");
buf.append(">");
buf.append("\n<input type=\"hidden\" id=\"PF_").append(thisFolderId);
buf.append("\" value=\"").append(parentId).append("\">");
//printing subfolder(s)
genFolderContents (buf, subFolder, contextPath, resource, thisFolderId, level+1);
buf.append("\n</div>");
buf.append("\n</td>");
buf.append("\n</tr>");
}
}
//printing file(s)
if (showFile)
genFiles (buf, folderObj.getFileList(), contextPath, resource, parentId, level);
buf.append("</table>");
}
private void genFiles (StringBuffer buf, List fileList, String contextPath, ResourceBundle resource, String parentId, int level) {
if (fileList != null) {
for (int i = 0; i < fileList.size(); i++) {
FileObject file = (FileObject) fileList.get(i);
buf.append("\n<tr>");
buf.append("\n<td align=\"left\">");
genSpaces (buf, level);
buf.append(" ");
String thisFileId = "L" + parentId + level + "F" + i;
buf.append("\n<span id=\"span").append(thisFileId);
buf.append("\" onClick=\"javascript:docman_docPathSelected='").append(file.getFilePath());
buf.append("';docman_fileOnClickFn('").append(thisFileId);
buf.append("');\" style=\"cursor:hand\">");
buf.append("<img src=\"").append(contextPath);
buf.append("/images/").append(resource.getString(file.getType()));
buf.append("\">").append(file.getName());
//for jameleon test tools
buf.append("<span id=\"").append(file.getFilePath().replaceAll("/", "_")).append("\">").append("</span>");
buf.append("</span>");
buf.append("\n<input type=\"hidden\" id=\"dFP_").append(file.getFilePath());
buf.append("\" value=\"").append(thisFileId).append("\">");
buf.append("\n<input type=\"hidden\" id=\"PF_").append(file.getFilePath());
buf.append("\" value=\"").append(parentId).append("\">");
buf.append("\n</td>");
buf.append("\n</tr>");
}
}
}
private void genSpaces (StringBuffer buf, int level) {
for (int i = 0; i < (level * 5); i++) {
buf.append(" ");
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?