0

我正在创建一个 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="," />&nbsp;Comma(,)</li>
                        <li><input type="checkbox" id="|" value="|" />&nbsp;Pipe
                            Delimiter(|)</li>
                        <li><input type="checkbox" name="delimeter" id="custom" />&nbsp;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 变为: 意味着添加自定义时数组索引更改。有没有办法解决这个问题?

4

1 回答 1

0

使用数组索引获取字段值不是一个好主意。您可以使用getFieldName()来获取字段名称并提取值。

getFieldName() 将返回元素name属性。对于您的情况:

String delimiter =null, transportTab = null;
if("delimiter".equals(item.getFieldName()){
   delimiter = item.getString();
}
if("transportTab".equals(item.getFieldName()){
   transportTab = item.getString();
}

这样,您可以获得所需属性的正确值。

于 2013-04-24T09:45:59.550 回答