我正在创建一个 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(我知道更好的方法是使用无线电 nuttons。但我正在使用这个)
<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];
如果我选择自定义,并输入一些值(比如:
),字符串分隔符 bcomes on,transportTab 变为:
意味着添加自定义时数组索引更改。有没有办法解决这个问题?