JAX RS Jersey Rest Webservice 发布由用户输入生成的数组
JAX RS Jersey Rest Webservice posting a array generated by input from user
我正在制作一个智能应用程序,它可以记录用户家中电器的能源消耗。如果设备在特定时间间隔之外打开,它也可以关闭设备,例如用户希望他的计算机在晚上关闭。
我有以下问题,用户必须输入他想注册的电器数量,然后会生成那个数量的文本框,这样他就可以输入这些电器的时间间隔。我已经使用一些 javascript 将此输入保存在一个数组中,但是如何使用 post 请求发送它?我以为我必须使用 @FormParam,就像 posting 用户名和密码一样,但这似乎对我不起作用。这是 applianceInfo.html 的样子:
<html>
<body>
<h2>Hello World!</h2>
<form action="/Smart_Webapp/rest/hello/applianceInfo"
method="POST" oninput="array.value=getArray(numberOfAppliances.value)">
<p>
<input type="text" name="numberOfAppliances" id="numberOfAppliances" />
<input type="button" name="button" id="button" value="Create" onclick="createTextFields(numberOfAppliances.value);" />
<input type="button" name="saveButton" id="saveButton" value="Save" onclick="getArray(numberOfAppliances.value);" />
<div id="textFields"></div>
<output name="array" for="numberOfAppliances"></output>
</p>
<input type="submit" value="Submit" />
<p id="array"></p>
</form>
<script>
function createTextFields(nums){
var input = "";
for(i=0;i<nums;i++){
input += "<input type='text' id='name" + i + "'" + " + ' /> "
+"<input type='text' id='start" + i + "'" + " + ' /> "
+"<input type='text' id='end" + i + "'" + " + ' /> <br/>";
}
document.getElementById("textFields").innerHTML = input;
}
function getArray(nums) {
var array = [];
for(i=0;i<nums;i++) {
array[i] = []
array[i].push(document.getElementById("name" + i).value);
array[i].push(document.getElementById("start" + i).value);
array[i].push(document.getElementById("end" + i).value);
}
document.getElementById("array").innerHTML = array.toString();
}
</script>
</body>
</html>
服务器端将调用以下函数:
@Path("/applianceInfo")
@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public void applianceInfo(@FormParam("array") String array, @Context HttpServletResponse servletResponse) throws IOException {
System.out.println(array);
}
我想要的是那里接收到的数组,但是打印的时候就打印了'null'。但是,当我尝试使用 numberOfAppliances 进行同样的操作时,它会很好地接收并打印出来。首先我认为这是因为可能在按下提交按钮后将创建数组。所以它会 post 空数组变量,然后生成数组。所以我做了一个额外的保存按钮来检查这个,但这并没有解决我的问题。
所以我的问题是如何将这个包含用户填写的设备输入的数组发送到服务器端?
<output>
未在表单提交中发送。您应该将 name
属性添加到您动态创建的所有 <input>
元素。
input += "<input name='array' type='text' id='name" + i + "'" + " + ' /> "
+ "<input name='array' type='text' id='start" + i + "'" + " + ' /> "
+ "<input name='array' type='text' id='end" + i + "'" + " + ' /> <br/>";
然后你可以在你的资源方法中这样做。
@Path("/applianceInfo")
@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public Response applianceInfo(@FormParam("array") List<String> array)
记住 <input>
元素的 name
属性值,它将成为 for 参数的键。所以请求正文看起来像
array=hello&array=world&array=blah
这就是我们在这里使用List
的原因,因为有多个参数带有关键字array
。
如果您想将每一行组合在一起,可以考虑使用 JSON 等不同格式来发送数据。
我正在制作一个智能应用程序,它可以记录用户家中电器的能源消耗。如果设备在特定时间间隔之外打开,它也可以关闭设备,例如用户希望他的计算机在晚上关闭。
我有以下问题,用户必须输入他想注册的电器数量,然后会生成那个数量的文本框,这样他就可以输入这些电器的时间间隔。我已经使用一些 javascript 将此输入保存在一个数组中,但是如何使用 post 请求发送它?我以为我必须使用 @FormParam,就像 posting 用户名和密码一样,但这似乎对我不起作用。这是 applianceInfo.html 的样子:
<html>
<body>
<h2>Hello World!</h2>
<form action="/Smart_Webapp/rest/hello/applianceInfo"
method="POST" oninput="array.value=getArray(numberOfAppliances.value)">
<p>
<input type="text" name="numberOfAppliances" id="numberOfAppliances" />
<input type="button" name="button" id="button" value="Create" onclick="createTextFields(numberOfAppliances.value);" />
<input type="button" name="saveButton" id="saveButton" value="Save" onclick="getArray(numberOfAppliances.value);" />
<div id="textFields"></div>
<output name="array" for="numberOfAppliances"></output>
</p>
<input type="submit" value="Submit" />
<p id="array"></p>
</form>
<script>
function createTextFields(nums){
var input = "";
for(i=0;i<nums;i++){
input += "<input type='text' id='name" + i + "'" + " + ' /> "
+"<input type='text' id='start" + i + "'" + " + ' /> "
+"<input type='text' id='end" + i + "'" + " + ' /> <br/>";
}
document.getElementById("textFields").innerHTML = input;
}
function getArray(nums) {
var array = [];
for(i=0;i<nums;i++) {
array[i] = []
array[i].push(document.getElementById("name" + i).value);
array[i].push(document.getElementById("start" + i).value);
array[i].push(document.getElementById("end" + i).value);
}
document.getElementById("array").innerHTML = array.toString();
}
</script>
</body>
</html>
服务器端将调用以下函数:
@Path("/applianceInfo")
@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public void applianceInfo(@FormParam("array") String array, @Context HttpServletResponse servletResponse) throws IOException {
System.out.println(array);
}
我想要的是那里接收到的数组,但是打印的时候就打印了'null'。但是,当我尝试使用 numberOfAppliances 进行同样的操作时,它会很好地接收并打印出来。首先我认为这是因为可能在按下提交按钮后将创建数组。所以它会 post 空数组变量,然后生成数组。所以我做了一个额外的保存按钮来检查这个,但这并没有解决我的问题。
所以我的问题是如何将这个包含用户填写的设备输入的数组发送到服务器端?
<output>
未在表单提交中发送。您应该将 name
属性添加到您动态创建的所有 <input>
元素。
input += "<input name='array' type='text' id='name" + i + "'" + " + ' /> "
+ "<input name='array' type='text' id='start" + i + "'" + " + ' /> "
+ "<input name='array' type='text' id='end" + i + "'" + " + ' /> <br/>";
然后你可以在你的资源方法中这样做。
@Path("/applianceInfo")
@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public Response applianceInfo(@FormParam("array") List<String> array)
记住 <input>
元素的 name
属性值,它将成为 for 参数的键。所以请求正文看起来像
array=hello&array=world&array=blah
这就是我们在这里使用List
的原因,因为有多个参数带有关键字array
。
如果您想将每一行组合在一起,可以考虑使用 JSON 等不同格式来发送数据。