Jfinal提交表单的问题

平安OSC 发布于 2014/04/12 18:14
阅读 4K+
收藏 1

@Jfinal

前台表单<input type="text" name="fileName" />,怎么后台用getPara("fileName");死活拿不到值呢?到底要怎么样取值呢,完整的表单:如下:

<form class="form-horizontal" action="/videos/save" id="myForm" method="post" enctype="multipart/form-data">
                <legend>视频上传</legend>

                <div class="control-group">
                    <label class="control-label" for="dirName">目录名称:</label>
                    <div class="controls">
                        <select name="dirName" id="dirName">
                            <c:forEach items="${types}" var="type">
                                <option value="${type.dirName}" class="opt">${type.type}</option>
                            </c:forEach>
                        </select>
                    </div>
                </div>

                <div class="control-group">
                    <label class="control-label" for="inputFileName">文件名:</label>

                    <div class="controls">
                        <input type="text" name="fileName" id="inputFileName"/>
                    </div>

                </div>
                <div class="control-group">
                    <label class="control-label" for="inputFile">选择文件:</label>

                    <div class="controls">
                        <input type="file" name="file" id="inputFile"/>
                    </div>

                </div>
                <div class="control-group">
                    <div class="controls">
                        <button type="submit" class="btn btn-primary">保存</button>
                        <a class="btn" href="/videos">返回</a>
                    </div>
                </div>
            </form>

后台代码:


public void save(){
        String dirName = getPara("dirName");
        String fileName = getPara("fileName");
        UploadFile file = getFile("file", dirName, 999999999 );
        redirect("/videos");
    }

此时只能拿到file,拿不到dirName和fileName这两个参数。请问大神要怎么搞呢?



加载中
0
delicate
delicate
有file 先getfile 多看文档
0
delicate
delicate
uploadfile放在最前面
0
平安OSC
平安OSC

引用来自“delicate”的评论

uploadfile放在最前面
那我要上传的时候将文件放到dirName指定的目录下呀,就是说不能直接传dirName参数了。
需要先上传到一个已知的临时目录,再放到dirName目录下吗?因为dirName必须在uploadFile后面。。。
delicate
delicate
暂存 再rename
0
天蓬小猪
天蓬小猪


public void save(){

       UploadFile file = getFile("file", dirName, 999999999 );

       String dirName = getPara("dirName");


        String fileName = getPara("fileName");

    
        redirect("/videos");

    }
这样你试试吧,http://my.oschina.net/u/257950/blog/217773 你可以看看 貌似写得还比较清楚的


0
JFinal
JFinal

    multipart request 的解析是在 getFile 时进行的,这样设计是为了更好的性能,当需要在 getFile 之前调用 getPara 时就达不到想要的结果,可以先 getFile 将文件暂存,在 getPara 后再将暂存文件 renameTo 一下。

    这样设计是为了尽可能地提升性能,而不用每次请求到来时都去判断是否为 multipart request,仅在 getFile 时直接当成是 multipart request,当然这是指在没有使用拦截器和其它辅助办法的情况下

emanruoy
emanruoy
这样子顺序依赖的设计很容易引起程序bug,尤其是这种没有显式声明的顺序依赖,很容易在程序反复调整过后埋下重大bug,比如某个功能,v0.1版本中没有文件上传的要求,v0.2版本增加了这种需要,然后程序员就发现改为multipart request后,原来的直接取参数相关的功能就不能用了,,相信这种情况肯定会让人很泄气的。
emanruoy
emanruoy
因此建议在不打破程序合理性的情况下适当考虑性能就够了,同时尽量不要在框架中带有这种未显式声明就存在的隐性顺序调用的规则。 比如应该在启用高性能开关(默认为关)的情况下才需要注意这些事项 或者在继承中强制重写某个方法来开启更高性能的multipart request 因为大部分项目的具体应用场景中优先是考虑高可靠高稳定性,然后才是适当提升性能。
平安OSC
平安OSC
懂了
0
红薯苗
红薯苗

先死一下试试哈哈哈哈

返回顶部
顶部