如何使用 Java Spark Framework queryMaps?
How do I use Java Spark Framework queryMaps?
我的 Html 的格式是
<input type="hidden" name="SONGS" value="6242,6243,6289,6290,6291,6292,6293,6294,6295,6296,6297,6298,">
<tr>
<td>
01 - Big Love.WAV
</td>
<td>
<input type="text" name="6242TRACK" value="01">
</td>
<td>
<input type="text" name="6242ARTIST" value="Fleetwood Mac">
</td>
<td>
<input type="text" name="6242ARTIST_SORT" value="Fleetwood Mac">
</td>
<td>
<input type="text" name="6242TITLE" value="Big Love">
</td>
</tr>
<tr>
<td>
02 - Seven Wonders.WAV
</td>
<td>
<input type="text" name="6243TRACK" value="02">
</td>
<td>
<input type="text" name="6243ARTIST" value="Fleetwood Mac">
</td>
<td>
<input type="text" name="6243ARTIST_SORT" value="Fleetwood Mac">
</td>
<td>
<input type="text" name="6243TITLE" value="Seven Wonders">
</td>
</tr>
当用户提交表单数据时,它会使用 Spark 框架进行处理。我的逻辑是从 SONGS 输入字段中获取 recno 列表,然后针对每个 recNo 浏览以该 recno 开头的输入字段。但它不起作用,我想我误解了 queryMaps 的工作原理
protected void saveData(Request req)
{
String[] recNos = req.queryParams(EditSongsPage.SONGS).split(",");
for(String recNo:recNos)
{
System.out.println("recNo--------------"+recNo);
for(String next:req.queryMap(recNo).values())
{
System.out.println(next);
}
}
}
但这给出了
recNo--------------6242
02/03/2018 08.58.22:GMT:com.jthink.songkong.server.callback.ServerEditSongs:startTask:SEVERE: null
java.lang.NullPointerException
at spark.QueryParamsMap.values(QueryParamsMap.java:262)
at com.jthink.songkong.server.callback.ServerEditSongs.saveData(ServerEditSongs.java:80)
at com.jthink.songkong.server.callback.ServerEditSongs.startTask(ServerEditSongs.java:52)
at com.jthink.songkong.server.CmdRemote.lambda$null(CmdRemote.java:171)
at spark.RouteImpl.handle(RouteImpl.java:72)
at spark.http.matching.Routes.execute(Routes.java:61)
at spark.http.matching.MatcherFilter.doFilter(MatcherFilter.java:130)
at spark.embeddedserver.jetty.JettyHandler.doHandle(JettyHandler.java:50)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1568)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
at org.eclipse.jetty.server.Server.handle(Server.java:564)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:317)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:251)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:279)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:110)
at org.eclipse.jetty.io.ChannelEndPoint.run(ChannelEndPoint.java:124)
at org.eclipse.jetty.util.thread.Invocable.invokePreferred(Invocable.java:128)
at org.eclipse.jetty.util.thread.Invocable$InvocableExecutor.invoke(Invocable.java:222)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:294)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:199)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:673)
at org.eclipse.jetty.util.thread.QueuedThreadPool.run(QueuedThreadPool.java:591)
at java.lang.Thread.run(Thread.java:745)
A QueryMap 从 HttpRequest 复制请求参数的内容,并将这些值放入以参数名称为键的映射中。
因为 HttpRequest 的内容被复制,所以 querymap 的值可以传递给另一个线程上的进程并相应地使用,而 HttpRequest 对象在收到请求的页面发回 HttpResponse.
后被擦除
这似乎是 QueryMap
的主要优点
我的 Html 的格式是
<input type="hidden" name="SONGS" value="6242,6243,6289,6290,6291,6292,6293,6294,6295,6296,6297,6298,">
<tr>
<td>
01 - Big Love.WAV
</td>
<td>
<input type="text" name="6242TRACK" value="01">
</td>
<td>
<input type="text" name="6242ARTIST" value="Fleetwood Mac">
</td>
<td>
<input type="text" name="6242ARTIST_SORT" value="Fleetwood Mac">
</td>
<td>
<input type="text" name="6242TITLE" value="Big Love">
</td>
</tr>
<tr>
<td>
02 - Seven Wonders.WAV
</td>
<td>
<input type="text" name="6243TRACK" value="02">
</td>
<td>
<input type="text" name="6243ARTIST" value="Fleetwood Mac">
</td>
<td>
<input type="text" name="6243ARTIST_SORT" value="Fleetwood Mac">
</td>
<td>
<input type="text" name="6243TITLE" value="Seven Wonders">
</td>
</tr>
当用户提交表单数据时,它会使用 Spark 框架进行处理。我的逻辑是从 SONGS 输入字段中获取 recno 列表,然后针对每个 recNo 浏览以该 recno 开头的输入字段。但它不起作用,我想我误解了 queryMaps 的工作原理
protected void saveData(Request req)
{
String[] recNos = req.queryParams(EditSongsPage.SONGS).split(",");
for(String recNo:recNos)
{
System.out.println("recNo--------------"+recNo);
for(String next:req.queryMap(recNo).values())
{
System.out.println(next);
}
}
}
但这给出了
recNo--------------6242
02/03/2018 08.58.22:GMT:com.jthink.songkong.server.callback.ServerEditSongs:startTask:SEVERE: null
java.lang.NullPointerException
at spark.QueryParamsMap.values(QueryParamsMap.java:262)
at com.jthink.songkong.server.callback.ServerEditSongs.saveData(ServerEditSongs.java:80)
at com.jthink.songkong.server.callback.ServerEditSongs.startTask(ServerEditSongs.java:52)
at com.jthink.songkong.server.CmdRemote.lambda$null(CmdRemote.java:171)
at spark.RouteImpl.handle(RouteImpl.java:72)
at spark.http.matching.Routes.execute(Routes.java:61)
at spark.http.matching.MatcherFilter.doFilter(MatcherFilter.java:130)
at spark.embeddedserver.jetty.JettyHandler.doHandle(JettyHandler.java:50)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1568)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
at org.eclipse.jetty.server.Server.handle(Server.java:564)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:317)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:251)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:279)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:110)
at org.eclipse.jetty.io.ChannelEndPoint.run(ChannelEndPoint.java:124)
at org.eclipse.jetty.util.thread.Invocable.invokePreferred(Invocable.java:128)
at org.eclipse.jetty.util.thread.Invocable$InvocableExecutor.invoke(Invocable.java:222)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:294)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:199)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:673)
at org.eclipse.jetty.util.thread.QueuedThreadPool.run(QueuedThreadPool.java:591)
at java.lang.Thread.run(Thread.java:745)
A QueryMap 从 HttpRequest 复制请求参数的内容,并将这些值放入以参数名称为键的映射中。
因为 HttpRequest 的内容被复制,所以 querymap 的值可以传递给另一个线程上的进程并相应地使用,而 HttpRequest 对象在收到请求的页面发回 HttpResponse.
后被擦除这似乎是 QueryMap
的主要优点