【发布时间】:2013-04-24 07:22:26
【问题描述】:
我正在创建一个 JSP 页面来上传 CSV 或 TXT 文件。文件数据由一些分隔符分隔。我正在使用复选框从用户那里检索,并且基于选中的复选框,我将文本字段值设置为受尊重的复选框值。我还为自定义分隔符添加了一个复选框。当用户选择该复选框时,将显示相同的文本字段(我在其中设置其他复选框的值),并且允许用户输入他们的自定义分隔符。
我还设置了一些其他输入隐藏字段,以将字符串值和 Java 对象从上一个 servlet 传递到下一个 servlet。
由于 JSP 用于文件上传,我不能使用 request.getParameter()。
但我能够阅读文本字段。我的意思是当用户检查除自定义之外的分隔符复选框时,servlet 正在读取文本输入。
但是当用户选中自定义复选框并输入自定义分隔符值时,它无法正确读取文本输入。
这是我的 JSP (FileUpload.jsp) 代码
<form class="form-horizontal" name="fileupload"
action="GenericFileUpload" onsubmit="return validateFile(this)"
enctype="multipart/form-data" method="post">
<div class="control-group">
<label class="control-label">Please choose delimiter:</label>
<div class="controls">
<ul class="nav nav-list">
<li><input type="checkbox" id="," value="," /> Comma(,)</li>
<li><input type="checkbox" id="|" value="|" /> Pipe
Delimiter(|)</li>
<li><input type="checkbox" name="delimeter" id="custom" /> Custom(Specify)</li>
</ul>
</div>
</div>
<div id="specify" class="control-group" style="display: none;">
<label class="control-label" for="delimiter">Please provide
the delimiter:</label>
<div class="controls">
<input id="customdelimiter" type="text" name="delimiter"
placeholder="Specify Delimiter" />
</div>
</div>
<input type="hidden" name="transportTab"
value="<c:if test="${transportTab != null}">${transportTab}</c:if>">
<input type="hidden" name="scheduleData" value="${scheduleData}">
<div class="control-group">
<label class="control-label" for="file">Please upload a
file:</label>
<div class="controls">
<input type="file" name="file" />
</div>
</div>
<div class="control-group">
<div class="controls">
<button type="submit" class="btn btn-primary">Continue</button>
</div>
</div>
</form>
这是我的 JQuery for Checkbox(我知道更好的方法是使用单选按钮。但我正在使用这个)
<script>
$(document).ready(function() {
$('input[type=checkbox]').change(function() {
if ($(this).is(':checked')) {
$('input[type=checkbox]').attr('disabled', true);
$(this).attr('disabled', false);
var delValue = $(this).val();
$('#customdelimiter').attr('value', delValue);
} else {
$('input[type=checkbox]').attr('disabled', false);
$('#customdelimiter').attr('value', '');
}
});
$('#custom').change(function() {
if ($(this).is(':checked')) {
$('#customdelimiter').attr('value', '');
$('#specify').slideDown("slow");
} else {
$('#specify').slideUp("slow");
$('#customdelimiter').attr('value', '');
}
});
});
</script>
根据选中的复选框值,我将文本框的值设置为该值。
我的 servlet (FileUploadServlet.java) 读取输入值的一部分是,
FileItem fileItem=null;
if ((contentType != null) && (contentType.indexOf("multipart/form-data") >= 0))
{
try
{
List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
String itemList[]=new String[items.size()];
for(int i=0;i<items.size();i++)
{
itemList[i]=new String();
}
int i=0;
for (FileItem item : items) {
if (item.isFormField()) {
// Process regular form field (input type="text|radio|checkbox|etc", select, etc).
itemList[i]=item.getString();
i++;
} else {
String delimiter=itemList[0];
System.out.println("delimiter value is "+delimiter);
String transportTab=itemList[1];
System.out.println("dataload value is "+transportTab);
String scheduleDataString= itemList[3];
如果我选择自定义,并输入一些值(比如:),
字符串分隔符打开,
transportTab 变为:
表示添加自定义时数组索引发生变化。
有没有办法解决这个问题?
【问题讨论】:
-
数组索引变化在哪里?
-
在 servlet 中。我的意思是
delimiter=itemList[0]; transportTab=itemList[1];Works选择适当的复选框(获取或|)但选择自定义复选框时,它给定on987654331:(假设我给出:作为自定义分隔符)for transporttab字符串。 span> -
您已经提到了定界符文本框的 name="delmeter",为什么不检查 java 代码中的字段名称。通过arrayindex删除您找到分隔符和transportTab的代码。
-
你的意思是
request.getParameter("delimiter")? -
显然不是。下面等我的回答
标签: java jquery jsp servlets multipartform-data