我写了web首页page.jsp:
<select id="type_label" name="type_label">
<option value=""></option>
<c:forEach items="${types}" var="type" varStatus="status">
<option value="${type}">${type}</option>
</c:forEach>
</select>
function dosearch(){
var type_label = document.getElementById("type_label");
var tagVal = type_label.options[type_label.selectedIndex].value;
window.location="${ctx}/content/query?tag="+tagVal;
}
在控制器Controller.java中: 我获取了mysql的数据行,并将这些数据行放在List列表中。 然后将列表放在模型中: model.add(“list”,list); 该列表在我的日志中包含数据行。
然后控制器使页面跳转到page.jsp。 该项目使用了rose java web frame。
返回“内容/页面”; 它使页面跳转到page.jsp。
但网址是: http://127.0.0.1:3428/web/content/page?type_label=%E6%90%9E%E7%AC%91¤tPage= 该网址预计将是: http://127.0.0.1:3428/web/content/page?tag=%E6%90%9E%E7%AC%91¤tPage=
url的参数是type_label而不是tag。 但是type_label是选择html元素的id。
为什么?请帮我一把。非常感谢!
答案 0 :(得分:0)
我知道它的原因。 在dosearch()执行之后,从mysql获取标记列表。 然后通过
跳转到content / page.jspreturn "content/page";
页面将按以下格式加载:
<form action="${ctx}/content/page" method="get" name="Form" id="Form"
class="form-horizontal">
它将再次从mysql获取数据列表。 因为它通过标签元素的名称“type_label”获得了tag参数。 然后它的url是“..type_label = tagname”。控制器的方法没有从“type_label”获取tag参数。所以它现在没有标签参数。 它将获得没有标记的数据列表。 所以数据列表不是这个标签的数据。
解决方案: HTML中的标记元素是:
<select id="tag" name="tag">
<option value=""></option>
<c:forEach items="${tag}" var="tag" varStatus="status">
<option value="${tag}">${tag}</option>
</c:forEach>
</select>
将dosearch()方法修改为:
function dosearch(){
$("#form").submit();
}
修改控制器代码以获取标记参数。像那样:
@Get("page")
public String page(Model model, @Param("tag") String tag){
...
}
控制器将通过标签元素的名称“tag”获取标签参数。 执行dosearch()后,控制器将从表单中获取tag参数。 然后在控制器中获取此标记的数据列表。并将列表添加到模型中。 最后,该页面将显示标签列表。