Javascript 从引导列表框中选择后,在Spring控制器中返回空值
我在这个论坛和谷歌上到处搜索,但在如何从Bootstrap样式的动态生成的列表框中读取所选值方面没有任何成功 这是JSP页面[reports01.JSP]代码:Javascript 从引导列表框中选择后,在Spring控制器中返回空值,javascript,spring-mvc,bootstrap-modal,Javascript,Spring Mvc,Bootstrap Modal,我在这个论坛和谷歌上到处搜索,但在如何从Bootstrap样式的动态生成的列表框中读取所选值方面没有任何成功 这是JSP页面[reports01.JSP]代码: <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ page isELIgnored="false"%> <%@ taglib prefix="for
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ page isELIgnored="false"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Contract-wise Report Selection</title>
<link href="<c:url value='/static/css/bootstrap.css' />"
rel="stylesheet"></link>
<link href="<c:url value='/static/css/app.css' />" rel="stylesheet"></link>
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script>
function myFunction() {
var selectedvalue = $("#mySelect option:selected").val();
}
</script>
</head>
<body>
<div class="generic-container">
<%@include file="authheader.jsp"%>
<div class="well lead">Contract-wise Report Selection</div>
<form:form method="POST" modelAttribute="reports01"
action="reportDetailed01" class="form-horizontal">
<form:input type="hidden" path="id" id="id" />
<div class="row">
<div class="form-group col-md-12">
<label class="col-md-3 control-lable" for="contractMap">Contracts
to Select</label>
<div class="col-md-7">
<form:select id="mySelect" path="contractMap"
onChange="myFunction" items="${contractList}" multiple="true"
class="form-control input-sm" />
<div class="has-error">
<form:errors path="contractMap" class="help-inline" />
</div>
</div>
</div>
</div>
<button type="button" onclick="myFunction()">Try it</button>
<div class="row">
<div class="form-actions floatRight">
<input type="submit" value="Print" class="btn btn-primary btn-sm" />
or <a href="<c:url value='/' />">Cancel</a>
</div>
</div>
<div class="well">
<a href="<c:url value='/' />">Back to Menu</a>
</div>
</form:form>
</div>
</body>
</html>
}
这是表单的域模型:
public class ReportForm01 implements Serializable {
private static final long serialVersionUID = 1L;
private Integer Id;
private Map<Integer,String> contractMap = new HashMap<Integer, String>();
private Map<Integer, String> selectedContractMap = new HashMap<Integer, String>();
public Map<Integer,String> getContractMap() {
return contractMap;
}
public void setContractMap(Map<Integer,String> contractMap) {
this.contractMap = contractMap;
}
public Integer getId() {
return Id;
}
public void setId(Integer id) {
Id = id;
}
public Map<Integer, String> getSelectedContractMap() {
return selectedContractMap;
}
public void setSelectedContractMap(Map<Integer, String> selectedContractMap) {
this.selectedContractMap = selectedContractMap;
}
}
公共类ReportForm01实现可序列化{
私有静态最终长serialVersionUID=1L;
私有整数Id;
private Map contractMap=新HashMap();
私有映射selectedContractMap=新建HashMap();
公共地图getContractMap(){
返回合同图;
}
公共无效setContractMap(映射contractMap){
this.contractMap=contractMap;
}
公共整数getId(){
返回Id;
}
公共无效集合id(整数id){
Id=Id;
}
公共地图getSelectedContractMap(){
返回所选的ContractMap;
}
公共无效集合selectedContractMap(Map selectedContractMap){
this.selectedContractMap=selectedContractMap;
}
}
我看过这些帖子:
但似乎一切都不起作用
我怀疑我可能缺少处理用户选择的脚本。如果您有任何帮助,我们将不胜感激。在进行了更深入的搜索之后,以下链接证明非常重要: 我可以这样解决我的问题: 修订后的JSP页面:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ page isELIgnored="false"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Contract-wise Report Selection</title>
<link href="<c:url value='/static/css/bootstrap.css' />"
rel="stylesheet"></link>
<link href="<c:url value='/static/css/app.css' />" rel="stylesheet"></link>
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script
src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script
src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script>
function getValue() {
var x = document.getElementById("sel");
var completeRange = "";
for (var i = 0; i < x.options.length; i++) {
if (x.options[i].selected) {
var selectedString = x.options[i].text;
completeRange = completeRange + ", " + selectedString;
}
}
document.getElementById('contractListJS').value = completeRange
.substring(2);
document.getElementById("reportDetailed01").submit();
}
</script>
</head>
<body>
<div class="generic-container">
<%@include file="authheader.jsp"%>
<div class="well lead">Contract-wise Report Selection</div>
<form:form method="POST" modelAttribute="reports01"
action="reportDetailed01" id="reportDetailed01" class="form-horizontal">
<div class="row">
<form:input path="contractList" type="hidden" id="contractListJS"
value="" />
</div>
<div class="row">
<div class="form-group col-md-12">
<label class="col-md-3 control-lable" for="contractMap">Contracts
to Select</label>
<div class="col-md-7">
<form:select id="sel" path="contractMap" items="${contractMap}"
multiple="true" class="form-control input-sm" />
<div class="has-error">
<form:errors path="contractMap" class="help-inline" />
</div>
</div>
</div>
</div>
<div class="row">
<div class="form-actions floatRight">
<input type="submit" value="Print" onclick="getValue()"
class="btn btn-primary btn-sm" /> or <a
href="<c:url value='/' />">Cancel</a>
</div>
</div>
<div class="well">
<a href="<c:url value='/' />">Back to Menu</a>
</div>
</form:form>
</div>
</body>
</html>
合约式报表选择
函数getValue(){
var x=document.getElementById(“sel”);
var completeRange=“”;
对于(变量i=0;i
控制员:
@Controller
@RequestMapping("/")
public class ReportsController01 {
@Autowired
ContractService contractService;
/**
* This method returns the principal[user-name] of logged-in user.
*/
private String getPrincipal() {
String userName = null;
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
if (principal instanceof UserDetails) {
userName = ((UserDetails) principal).getUsername();
} else {
userName = principal.toString();
}
return userName;
}
/**
* This method will list all contracts for selection.
*/
@RequestMapping(value = { "/reportDetailed01" }, method = RequestMethod.GET)
public String showContractsForReports01(ModelMap model) {
ReportForm01 rf01 = new ReportForm01();
Map<Integer, String> contractList = contractService.findAllContracts01();
System.out.println(contractList);
System.out.println("========= GET ================");
model.addAttribute("reports01", rf01);
model.addAttribute("contractMap", contractList);
model.addAttribute("loggedinuser", getPrincipal());
return "reports01";
}
/**
* This method will get all contracts after selection.
*/
@RequestMapping(value = { "/reportDetailed01" }, method = RequestMethod.POST)
public String getContractsForReports01(@ModelAttribute ReportForm01 reportForm01, BindingResult bindingResult, HttpServletRequest request) {
System.out.println("=================== POST ===============");
System.out.println(reportForm01.getContractList());
System.out.println("=====================xxx=================");
return "redirect:/";
}
}
@控制器
@请求映射(“/”)
公共类报表Controller01{
@自动连线
合同服务合同服务;
/**
*此方法返回登录用户的主体[用户名]。
*/
私有字符串getPrincipal(){
字符串userName=null;
对象主体=SecurityContextHolder.getContext().getAuthentication().getPrincipal();
if(UserDetails的主体实例){
userName=((UserDetails)principal.getUsername();
}否则{
userName=principal.toString();
}
返回用户名;
}
/**
*此方法将列出所有合同供选择。
*/
@RequestMapping(值={“/reportDetailed01”},方法=RequestMethod.GET)
公共字符串showContractsForReports01(模型映射模型){
ReportForm01 rf01=新的ReportForm01();
Map contractList=contractService.findAllContracts01();
系统输出打印LN(合同清单);
System.out.println(“=======================================================”);
model.addAttribute(“reports01”,rf01);
model.addAttribute(“contractMap”,contractList);
addAttribute(“loggedinuser”,getPrincipal());
返回“reports01”;
}
/**
*此方法将在选择后获取所有合同。
*/
@RequestMapping(值={“/reportDetailed01”},方法=RequestMethod.POST)
公共字符串getContractsForReports01(@ModelAttribute ReportForm01 ReportForm01,BindingResult BindingResult,HttpServletRequest请求){
System.out.println(“=========================================================================”);
System.out.println(reportForm01.getContractList());
System.out.println(“===========================================================================================”);
返回“重定向:/”;
}
}
域模型:
public class ReportForm01 implements Serializable {
private static final long serialVersionUID = 1L;
private String contractList;
private Map<Integer,String> contractMap = new HashMap<Integer, String>();
public Map<Integer,String> getContractMap() {
return contractMap;
}
public void setContractMap(Map<Integer,String> contractMap) {
this.contractMap = contractMap;
}
public String getContractList() {
return contractList;
}
public void setContractList(String contractList) {
this.contractList = contractList;
}
}
公共类ReportForm01实现可序列化{
私有静态最终长serialVersionUID=1L;
私有字符串列表;
private Map contractMap=新HashMap();
公共地图getContractMap(){
返回合同图;
}
公共无效setContractMap(映射contractMap){
this.contractMap=contractMap;
}
公共字符串getContractList(){
返回合同清单;
}
公共无效setContractList(字符串contractList){
this.contractList=合同列表;
}
}
@Controller
@RequestMapping("/")
public class ReportsController01 {
@Autowired
ContractService contractService;
/**
* This method returns the principal[user-name] of logged-in user.
*/
private String getPrincipal() {
String userName = null;
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
if (principal instanceof UserDetails) {
userName = ((UserDetails) principal).getUsername();
} else {
userName = principal.toString();
}
return userName;
}
/**
* This method will list all contracts for selection.
*/
@RequestMapping(value = { "/reportDetailed01" }, method = RequestMethod.GET)
public String showContractsForReports01(ModelMap model) {
ReportForm01 rf01 = new ReportForm01();
Map<Integer, String> contractList = contractService.findAllContracts01();
System.out.println(contractList);
System.out.println("========= GET ================");
model.addAttribute("reports01", rf01);
model.addAttribute("contractMap", contractList);
model.addAttribute("loggedinuser", getPrincipal());
return "reports01";
}
/**
* This method will get all contracts after selection.
*/
@RequestMapping(value = { "/reportDetailed01" }, method = RequestMethod.POST)
public String getContractsForReports01(@ModelAttribute ReportForm01 reportForm01, BindingResult bindingResult, HttpServletRequest request) {
System.out.println("=================== POST ===============");
System.out.println(reportForm01.getContractList());
System.out.println("=====================xxx=================");
return "redirect:/";
}
}
public class ReportForm01 implements Serializable {
private static final long serialVersionUID = 1L;
private String contractList;
private Map<Integer,String> contractMap = new HashMap<Integer, String>();
public Map<Integer,String> getContractMap() {
return contractMap;
}
public void setContractMap(Map<Integer,String> contractMap) {
this.contractMap = contractMap;
}
public String getContractList() {
return contractList;
}
public void setContractList(String contractList) {
this.contractList = contractList;
}
}