我有一个多下拉选择框可供选择类型列表。我正在JavaScript中创建一个JSON数组,其中包含用户选择的所有类型。将它们传递给后端Java函数以绘制图形。
Database : MySQL
JavaScript的:
var items = {};
$(function() {
$('#genres1').change(function() {
console.log($(this).val());
items.genres = $(this).val();
}).multipleSelect({
width: '56%'
});
});
var genres = items.genres.map(function(e){
return JSON.stringify(e);
});
var selectedGenres = genres.join(", ");
alert(selectedGenres); // Outputs : "Action", "Horror" and so on.... based on selection
爪哇:
public static void myFun(String genre){
Logger.info("Genre"+genre); //prints "Action","Horror"
List<String> selectedGenres = Arrays.asList(genre);
//List<String> selectedGenres = Arrays.asList("Action","Horror"); //Correct output
Logger.info("Genre"+selectedGenres); //prints ["Action","Horror"]
String queryString="SELECT wD FROM sed WHERE genre IN (:genres)";
Query query1=JPA.em().createNativeQuery(queryString).setParameter("genres", selectedGenres);
}
我不知道如何将数组传递给查询。
//List<String> selectedGenres = Arrays.asList("Action","Horror"); //Correct output
这个硬编码值给了我正确的输出。当我传递“selectedGenres”数组时,包含与上面输入完全相同的内容 - "Action","Horror"
我没有得到首选输出。我也尝试发送“类型”作为参数,但它不起作用。我得到空洞的回应。有人能在我出错的地方纠正我吗?
答案 0 :(得分:1)
List<String> selectedGenres = Arrays.asList(genre);
一些API澄清:Arrays#asList
接受String...
vargs,其中每个参数都是创建实际List的元素值。
回到你的方法:你的输入参数是String genre
(一个字符串),而#asList
方法不知道这个genre
字符串实际上是一个数组(并且不应该),并且它正确地完成其工作 - 在收到单个元素(在我们的例子中为String
)时,会创建一个单独的List
。
要解决此问题,您可能需要尝试其中一个选项:
genre
),然后将该数组转换回List。