java - 使用 Spark 从多个动态复选框请求查询

标签 java freemarker spark-java

我有一个 html 复选框列表,它是使用 Freemarker 动态创建的。 Html 看起来像这样:

<div data-role="collapsible">
    <h4>Software</h4>
    <form action="/" method="POST">
        <ul data-role="listview" >
            <#list softwareoptions as software>
                <input type="checkbox" id="softwarefilter" name="softwarefilter" value="${software}" autocomplete="off" >${software}
            </#list>
        </ul>
    </form>
</div>

这是生成的列表:

<div data-role="collapsible">
<h4>Software</h4>
<form action="/" method="POST">
    <ul data-role="listview" >
            <input type="checkbox" id="softwarefilter" name="softwarefilter" value="Adobe Creative Cloud" autocomplete="off" >Adobe Creative Cloud
            <input type="checkbox" id="softwarefilter" name="softwarefilter" value="Adobe Web Premium" autocomplete="off" >Adobe Web Premium
            <input type="checkbox" id="softwarefilter" name="softwarefilter" value="MATLAB" autocomplete="off" >MATLAB
            <input type="checkbox" id="softwarefilter" name="softwarefilter" value="Quicken" autocomplete="off" >Quicken
            <input type="checkbox" id="softwarefilter" name="softwarefilter" value="Steam" autocomplete="off" >Steam
            <input type="checkbox" id="softwarefilter" name="softwarefilter" value="IBM SPSS Statistics" autocomplete="off" >IBM SPSS Statistics
            <input type="checkbox" id="softwarefilter" name="softwarefilter" value="Microsoft SQL Server 2008" autocomplete="off" >Microsoft SQL Server 2008
            <input type="checkbox" id="softwarefilter" name="softwarefilter" value="Microsoft SQL Server 2012" autocomplete="off" >Microsoft SQL Server 2012
            <input type="checkbox" id="softwarefilter" name="softwarefilter" value="Microsoft Office" autocomplete="off" >Microsoft Office
            <input type="checkbox" id="softwarefilter" name="softwarefilter" value="Autodesk Infrastructure Design Suite" autocomplete="off" >Autodesk Infrastructure Design Suite
            <input type="checkbox" id="softwarefilter" name="softwarefilter" value="Microsoft Visual Studio 2010" autocomplete="off" >Microsoft Visual Studio 2010
            <input type="checkbox" id="softwarefilter" name="softwarefilter" value="Microsoft Visual Studio 2013" autocomplete="off" >Microsoft Visual Studio 2013
            <input type="checkbox" id="softwarefilter" name="softwarefilter" value="Microsoft Visual Studio 2015" autocomplete="off" >Microsoft Visual Studio 2015
            <input type="checkbox" id="softwarefilter" name="softwarefilter" value="Microsoft Visio" autocomplete="off" >Microsoft Visio
            <input type="checkbox" id="softwarefilter" name="softwarefilter" value="Unity 3d" autocomplete="off" >Unity 3d
            <input type="checkbox" id="softwarefilter" name="softwarefilter" value="GIMP" autocomplete="off" >GIMP
            <input type="checkbox" id="softwarefilter" name="softwarefilter" value="Maxon CINEMA 4D Broadcast" autocomplete="off" >Maxon CINEMA 4D Broadcast
            <input type="checkbox" id="softwarefilter" name="softwarefilter" value="CrazyBump" autocomplete="off" >CrazyBump
            <input type="checkbox" id="softwarefilter" name="softwarefilter" value="FRAPS" autocomplete="off" >FRAPS
            <input type="checkbox" id="softwarefilter" name="softwarefilter" value="InfraRecorder" autocomplete="off" >InfraRecorder
            <input type="checkbox" id="softwarefilter" name="softwarefilter" value="Garageband" autocomplete="off" >Garageband
            <input type="checkbox" id="softwarefilter" name="softwarefilter" value="Microsoft Project" autocomplete="off" >Microsoft Project
            <input type="checkbox" id="softwarefilter" name="softwarefilter" value="Numbers" autocomplete="off" >Numbers
            <input type="checkbox" id="softwarefilter" name="softwarefilter" value="Pages" autocomplete="off" >Pages
            <input type="checkbox" id="softwarefilter" name="softwarefilter" value="Fontographer" autocomplete="off" >Fontographer
            <input type="checkbox" id="softwarefilter" name="softwarefilter" value="Keynote" autocomplete="off" >Keynote
            <input type="checkbox" id="softwarefilter" name="softwarefilter" value="Wacom Tablet" autocomplete="off" >Wacom Tablet
            <input type="checkbox" id="softwarefilter" name="softwarefilter" value="Arduino" autocomplete="off" >Arduino
            <input type="checkbox" id="softwarefilter" name="softwarefilter" value="iBooks" autocomplete="off" >iBooks
            <input type="checkbox" id="softwarefilter" name="softwarefilter" value="iMovie" autocomplete="off" >iMovie
            <input type="checkbox" id="softwarefilter" name="softwarefilter" value="Logic Pro X" autocomplete="off" >Logic Pro X
            <input type="checkbox" id="softwarefilter" name="softwarefilter" value="iTunes" autocomplete="off" >iTunes
    </ul>
</form>
</div>

要请求复选框的值,我使用 Java 代码:

Object softstring = request.queryParams("softwarefilter");

但是,这仅返回选中的第一个复选框名称的字符串值。例如,如果选中 Adob​​e Creative Suite 和 MATLAB,则 softstring =“Adobe Creative Suite”。

当我使用时:

 Object softstring = request.queryParamsValues("softwarefilter");

QueryParamsMap softmap = request.queryMap("softwarefilter");

我分别得到一个空数组和一个空映射。关于我可能缺少什么的任何提示吗?

最佳答案

我使用了与问题中相同的 HTML 代码,只是我在表单中添加了一个提交标签。

经检查,所有选择的选项均在表单数据部分。

enter image description here

因此,可以从 req.body(); 检索选项。例如,如果我选择“Adobe Creative Cloud”和“Adobe Web Premium”,则 req 的输出.body();

softwarefilter=Adobe+Creative+Cloud&softwarefilter=Adobe+Web+Premium

现在需要解析这个原始字符串以获取所有选定的选项。希望这可以帮助。

关于java - 使用 Spark 从多个动态复选框请求查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35244673/

相关文章:

java - Freemarker getServletContext().getMimeType(文件名)

java - LDAP比较用户名密码?

Java并行数组查找两个匹配项

java - 通过反射获取枚举的值

java - Freemarker 将整数格式设置为分钟和秒

java - Spring 绑定(bind)形式多选

Android - Freemarker 库配置初始化期间出错

java - 如何使用 Spark Web Framework 将变量绑定(bind)到 websocket 路由路径中?

java - SparkJava - 按子域路由

java - Mule 没有使用 Spring 找到属性文件