i am implementing a news forum whereby users can upload attachments for a message. While at the moment i can successfully iterate through the list of attachments in the page context and display them as checkboxes, i need some way of being able to remove attachments. so when the remove button is clicked i can remove that check box as well as its entry in the page context list. below is the code for my JSP.
<%@ page language="java" import="javazoom.upload.*,java.util.*, java.io.*, com.mediasurface.client.IItem, com.mediasurface.datatypes.ItemKey, com.mediasurface.client.ISite, com.mediasurface.client.IType" %>
<%@ page errorPage="ExceptionHandler.jsp" %>
<%@ include file="/WEB-INF/components/general/tagDirectives.inc"%>
<jsp:useBean id="upBean" scope="page" class="javazoom.upload.UploadBean" >
<jsp:setProperty name="upBean" property="filesizelimit" value="<%= 1024 %>" />
<req:request id="theRequest" />
<script language="Javascript" type="text/javascript">
<!--
function checkForm()
{
var mform = document.addMessageForm;
var nonvalid='';
if ( mform.summary.value.match( /\S/ ) == null ) { nonvalid += "- Please enter a message summary\n"; }
if ( mform.bodytext.value.match( /\S/ ) == null ) { nonvalid += "- Please enter your message details\n"; }
if ( nonvalid == '' ) { return true; }
else { alert( nonvalid ); return false; }
}
//-->
</script>
<div class="holder">
<form action="?<jsp:getProperty name="theRequest" property="queryString" />&submit" method="post" onsubmit="return checkForm();">
<input type="hidden" name="summary" value="Topic Reply" />
<fieldset>
<table cellpadding="0" cellspacing="0" border="0" class="formTable" summary="Add a reply">
<colgroup>
<col width="20%" />
<col width="80%" />
</colgroup>
<tr>
<td class="formLabel" valign="top"><label for="addtopic">Add a reply</label></td>
<td><textarea name="bodytext" id="addtopic" class="formTextarea" cols="25" rows="4"></textarea></td>
</tr>
</table>
</fieldset>
<div class="submitButton">
<input type="submit" value="ADD" class="button" />
</div>
</form>
<%
String filepath = "";
Integer topicItemId;
int forumItemId = 0;
try
{
topicItemId = Integer.valueOf(pageContext.getRequest().getParameter("topic"));
}
catch (Exception e)
{
topicItemId = null;
}
if (topicItemId != null)
{
IItem topicItem = null;
try
{
topicItem = ms.getItem(ctx, new ItemKey(topicItemId.intValue()));
}
catch (Exception e)
{
//out.println("Failed to find topic with id " + topicItemId, e);
}
if (topicItem != null)
{
try
{
forumItemId = topicItem.getParent().getKey().getIntKey();
}
catch (Exception e)
{
//out.println("Failed to find forum containing topic with id " + topicItemId, e);
}
}
}
filepath = "C:"+ File.separator + "forum_" +forumItemId + File.separator + "topic_" +topicItemId;
pageContext.setAttribute("filepath",filepath);
%>
<jsp:setProperty name="upBean" property="folderstore" value="<%=filepath%>" />
</jsp:useBean>
<br></br>
<br></br>
<br></br>
<p>
<%
String attachmentName = null;
String testName = "";
ArrayList d_attachments = null;
if (MultipartFormDataRequest.isMultipartFormData(request))
{
// Uses MultipartFormDataRequest to parse the HTTP request.
MultipartFormDataRequest mrequest = new MultipartFormDataRequest(request);
String todo = null;
if (mrequest != null) todo = mrequest.getParameter("todo");
if ( (todo != null) && (todo.equalsIgnoreCase("upload")) )
{
Hashtable files = mrequest.getFiles();
if ( (files != null) && (!files.isEmpty()) )
{
UploadFile file = (UploadFile) files.get("uploadfile");
File uploadDirectory = new File(upBean.getFolderstore());
String[] uploadedFiles = uploadDirectory.list();
d_attachments = (ArrayList)pageContext.getAttribute("attachmentList", PageContext.SESSION_SCOPE);
System.out.println("d_attachments is " + d_attachments);
if(d_attachments != null)
{
//if(d_attachments.size() < 4)
// {
if (file != null)
{
if(file.getFileSize() <= upBean.getFilesizelimit())
{
// Uses the bean now to store specified by jsp:setProperty at the top.
upBean.store(mrequest, "uploadfile");
pageContext.setAttribute("originalfilename",file.getFileName(), PageContext.REQUEST_SCOPE);
File uploadedFile = new File(upBean.getFolderstore() + File.separator + file.getFileName());
File timestampedUploadedFile = new File(upBean.getFolderstore() + File.separator + System.currentTimeMillis() + "_"+file.getFileName());
boolean success = uploadedFile.renameTo(timestampedUploadedFile);
if (success)
{
pageContext.setAttribute("attachmentname",timestampedUploadedFile.getAbsolutePath(), PageContext.REQUEST_SCOPE);
}
}
else
{
out.println("<li>Uploaded File Size = "+file.getFileSize()+"!</li>");
out.println("<li>The attachment size must not exceed "+upBean.getFilesizelimit()+"!</li>");
}
}
//}
//else
//{
// out.println("<li>Only 4 files can be uploaded per message</li>");
//}
}
else{
if (file != null)
{
if(file.getFileSize() <= upBean.getFilesizelimit())
{
// Uses the bean now to store specified by jsp:setProperty at the top.
upBean.store(mrequest, "uploadfile");
pageContext.setAttribute("originalfilename",file.getFileName(), PageContext.REQUEST_SCOPE);
File uploadedFile = new File(upBean.getFolderstore() + File.separator + file.getFileName());
File timestampedUploadedFile = new File(upBean.getFolderstore() + File.separator + System.currentTimeMillis() + "_"+file.getFileName());
boolean success = uploadedFile.renameTo(timestampedUploadedFile);
if (success)
{
//out.println(timestampedUploadedFile.getAbsoluteFile());
pageContext.setAttribute("attachmentname",timestampedUploadedFile.getAbsolutePath(), PageContext.REQUEST_SCOPE );
}
}
else
{
out.println("<li>Uploaded File Size = "+file.getFileSize()+"!</li>");
out.println("<li>The attachment size must not exceed "+upBean.getFilesizelimit()+"!</li>");
}
}
}
}
else
{
out.println("<li>No uploaded files</li>");
}
}
else out.println("<BR> todo="+todo);
}
%>
<cut value="${originalfilename}"/>
<form method="post" action="#" name="upform" enctype="multipart/form-data">
<table cellpadding="0" cellspacing="0" border="0" class="formTable">
<tr>
<td align="left"><b>Select a file to attach to your message (maximum of 4 files) :</b></td>
</tr>
<tr>
<td align="left">
<input type="file" name="uploadfile" size="50">
</td>
</tr>
<tr>
<td align="left">
<input type="hidden" name="todo" value="upload">
<input type="submit" name="Submit" value="Upload">
<input type="reset" name="Reset" value="Cancel">
</td>
</tr>
</table>
</form>
</p>
</div>
<c:if test="${attachmentname != null}">
<ho:forumAttachmentHelper var="attachmentname" />
</c:if>
<c:if test="${originalAttachmentNameList != null}">
<form method="post" action="#" name="upform" enctype="multipart/form-data">
<c:forEach items="${originalAttachmentNameList}" var="token">
<input type="checkbox" name="attachment"><cut value="${token}"/>
</c:forEach>
</c:if>
the main section of interest is the above form which shows where the check boxes are made. The 'originalAttachmentList' is set in the page context from an associated java file whenever a new attachment is added.
The inline java in the code deals with firstly setting up the filepath for the attachment, and secondly taking an uploaded file and storing it on disk, and adding it to a arrayList in the page contexts
Obviously i will need some way in this inline java to determine which checkboxes were removed so that i can remove them from the page context array list
regards,
cajchris
<%@ page language="java" import="javazoom.upload.*,java.util.*, java.io.*, com.mediasurface.client.IItem, com.mediasurface.datatypes.ItemKey, com.mediasurface.client.ISite, com.mediasurface.client.IType" %>
<%@ page errorPage="ExceptionHandler.jsp" %>
<%@ include file="/WEB-INF/components/general/tagDirectives.inc"%>
<jsp:useBean id="upBean" scope="page" class="javazoom.upload.UploadBean" >
<jsp:setProperty name="upBean" property="filesizelimit" value="<%= 1024 %>" />
<req:request id="theRequest" />
<script language="Javascript" type="text/javascript">
<!--
function checkForm()
{
var mform = document.addMessageForm;
var nonvalid='';
if ( mform.summary.value.match( /\S/ ) == null ) { nonvalid += "- Please enter a message summary\n"; }
if ( mform.bodytext.value.match( /\S/ ) == null ) { nonvalid += "- Please enter your message details\n"; }
if ( nonvalid == '' ) { return true; }
else { alert( nonvalid ); return false; }
}
//-->
</script>
<div class="holder">
<form action="?<jsp:getProperty name="theRequest" property="queryString" />&submit" method="post" onsubmit="return checkForm();">
<input type="hidden" name="summary" value="Topic Reply" />
<fieldset>
<table cellpadding="0" cellspacing="0" border="0" class="formTable" summary="Add a reply">
<colgroup>
<col width="20%" />
<col width="80%" />
</colgroup>
<tr>
<td class="formLabel" valign="top"><label for="addtopic">Add a reply</label></td>
<td><textarea name="bodytext" id="addtopic" class="formTextarea" cols="25" rows="4"></textarea></td>
</tr>
</table>
</fieldset>
<div class="submitButton">
<input type="submit" value="ADD" class="button" />
</div>
</form>
<%
String filepath = "";
Integer topicItemId;
int forumItemId = 0;
try
{
topicItemId = Integer.valueOf(pageContext.getRequest().getParameter("topic"));
}
catch (Exception e)
{
topicItemId = null;
}
if (topicItemId != null)
{
IItem topicItem = null;
try
{
topicItem = ms.getItem(ctx, new ItemKey(topicItemId.intValue()));
}
catch (Exception e)
{
//out.println("Failed to find topic with id " + topicItemId, e);
}
if (topicItem != null)
{
try
{
forumItemId = topicItem.getParent().getKey().getIntKey();
}
catch (Exception e)
{
//out.println("Failed to find forum containing topic with id " + topicItemId, e);
}
}
}
filepath = "C:"+ File.separator + "forum_" +forumItemId + File.separator + "topic_" +topicItemId;
pageContext.setAttribute("filepath",filepath);
%>
<jsp:setProperty name="upBean" property="folderstore" value="<%=filepath%>" />
</jsp:useBean>
<br></br>
<br></br>
<br></br>
<p>
<%
String attachmentName = null;
String testName = "";
ArrayList d_attachments = null;
if (MultipartFormDataRequest.isMultipartFormData(request))
{
// Uses MultipartFormDataRequest to parse the HTTP request.
MultipartFormDataRequest mrequest = new MultipartFormDataRequest(request);
String todo = null;
if (mrequest != null) todo = mrequest.getParameter("todo");
if ( (todo != null) && (todo.equalsIgnoreCase("upload")) )
{
Hashtable files = mrequest.getFiles();
if ( (files != null) && (!files.isEmpty()) )
{
UploadFile file = (UploadFile) files.get("uploadfile");
File uploadDirectory = new File(upBean.getFolderstore());
String[] uploadedFiles = uploadDirectory.list();
d_attachments = (ArrayList)pageContext.getAttribute("attachmentList", PageContext.SESSION_SCOPE);
System.out.println("d_attachments is " + d_attachments);
if(d_attachments != null)
{
//if(d_attachments.size() < 4)
// {
if (file != null)
{
if(file.getFileSize() <= upBean.getFilesizelimit())
{
// Uses the bean now to store specified by jsp:setProperty at the top.
upBean.store(mrequest, "uploadfile");
pageContext.setAttribute("originalfilename",file.getFileName(), PageContext.REQUEST_SCOPE);
File uploadedFile = new File(upBean.getFolderstore() + File.separator + file.getFileName());
File timestampedUploadedFile = new File(upBean.getFolderstore() + File.separator + System.currentTimeMillis() + "_"+file.getFileName());
boolean success = uploadedFile.renameTo(timestampedUploadedFile);
if (success)
{
pageContext.setAttribute("attachmentname",timestampedUploadedFile.getAbsolutePath(), PageContext.REQUEST_SCOPE);
}
}
else
{
out.println("<li>Uploaded File Size = "+file.getFileSize()+"!</li>");
out.println("<li>The attachment size must not exceed "+upBean.getFilesizelimit()+"!</li>");
}
}
//}
//else
//{
// out.println("<li>Only 4 files can be uploaded per message</li>");
//}
}
else{
if (file != null)
{
if(file.getFileSize() <= upBean.getFilesizelimit())
{
// Uses the bean now to store specified by jsp:setProperty at the top.
upBean.store(mrequest, "uploadfile");
pageContext.setAttribute("originalfilename",file.getFileName(), PageContext.REQUEST_SCOPE);
File uploadedFile = new File(upBean.getFolderstore() + File.separator + file.getFileName());
File timestampedUploadedFile = new File(upBean.getFolderstore() + File.separator + System.currentTimeMillis() + "_"+file.getFileName());
boolean success = uploadedFile.renameTo(timestampedUploadedFile);
if (success)
{
//out.println(timestampedUploadedFile.getAbsoluteFile());
pageContext.setAttribute("attachmentname",timestampedUploadedFile.getAbsolutePath(), PageContext.REQUEST_SCOPE );
}
}
else
{
out.println("<li>Uploaded File Size = "+file.getFileSize()+"!</li>");
out.println("<li>The attachment size must not exceed "+upBean.getFilesizelimit()+"!</li>");
}
}
}
}
else
{
out.println("<li>No uploaded files</li>");
}
}
else out.println("<BR> todo="+todo);
}
%>
<cut value="${originalfilename}"/>
<form method="post" action="#" name="upform" enctype="multipart/form-data">
<table cellpadding="0" cellspacing="0" border="0" class="formTable">
<tr>
<td align="left"><b>Select a file to attach to your message (maximum of 4 files) :</b></td>
</tr>
<tr>
<td align="left">
<input type="file" name="uploadfile" size="50">
</td>
</tr>
<tr>
<td align="left">
<input type="hidden" name="todo" value="upload">
<input type="submit" name="Submit" value="Upload">
<input type="reset" name="Reset" value="Cancel">
</td>
</tr>
</table>
</form>
</p>
</div>
<c:if test="${attachmentname != null}">
<ho:forumAttachmentHelper var="attachmentname" />
</c:if>
<c:if test="${originalAttachmentNameList != null}">
<form method="post" action="#" name="upform" enctype="multipart/form-data">
<c:forEach items="${originalAttachmentNameList}" var="token">
<input type="checkbox" name="attachment"><cut value="${token}"/>
</c:forEach>
</c:if>
the main section of interest is the above form which shows where the check boxes are made. The 'originalAttachmentList' is set in the page context from an associated java file whenever a new attachment is added.
The inline java in the code deals with firstly setting up the filepath for the attachment, and secondly taking an uploaded file and storing it on disk, and adding it to a arrayList in the page contexts
Obviously i will need some way in this inline java to determine which checkboxes were removed so that i can remove them from the page context array list
regards,
cajchris