在同一页面中存储选定元素值的位置?
Posted
技术标签:
【中文标题】在同一页面中存储选定元素值的位置?【英文标题】:Where to store selected element values in same page? 【发布时间】:2013-02-20 18:26:42 【问题描述】:我有 main.jsp,其中包括 4 个 jsp 页面,即 company.jsp,software.jsp,location.jsp,dept.jsp 和最后将是提交按钮,它将被重定向到另一个 jsp 页面
注意:在 company.jsp 和 Software.jsp 中,只有一个单选按钮可以点击 在 location.jsp 中,dept.jsp 有带有多个复选框的复选框 我想优化我的搜索 像这样的:
我希望当基于公司选择的软件在 company.jsp 中选择一个单选按钮时,将从数据库中显示。当软件是选择与复选框时的位置,将基于数据库出现。然后,如果选择了位置的部门,则基于数据库,依此类推。
我尝试使用 jquery,其中选定的单选按钮作为参数添加到 url 但这是不好的做法,因为我正在通过 window.location.href
更改 url。这是不好的做法
使用 servlet 或 jquery 的任何其他想法?
编辑:
main.jsp
<div style="background-color:#F4F4F4"><b>Company:</b></div>
<div id="company"> <jsp:include page="company.jsp"></jsp:include> </div>
<div style="background-color:#F4F4F4"><b>Software:</b></div>
<div id="software">
<jsp:include page="software.jsp"></jsp:include> </div>
<div style="background-color:#F4F4F4"><b>Location:</b></div>
<div id="location">
<jsp:include page="my_location.jsp"></jsp:include> </div>
company.jsp
<script src="jquery-1.9.1.min.js"></script>
<script src="jquery-1.9.1.js"></script>
<script type="text/javascript">
function call(a)
window.location.href="main.jsp?company="+a ;
</script>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%
Connection conn = null;
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
Connection con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","","");
ResultSet rs = null;
Statement st=null;
st=con.createStatement();
%>
<form name=company_form id=company_form>
<%
String name=request.getParameter("r");
if(name!=null)
//out.println("value in company.jsp:"+name);
%>
<br>
<%
try
rs = st.executeQuery("select DISTINCT(COMPANY) from maindatabase");
int i=0;
while(rs.next())
%>
<input type="radio" name="r" onclick='call(this.value)' class='class_company' value="<%= rs.getString("COMPANY") %>"><%= rs.getString("COMPANY") %><br>
<%
//System.out.println("company count:"+i);
i++;
catch(SQLException e)
System.out.println(e.getMessage());
%>
</form>
<script type="text/javascript">
function checkall()
var prmstr = window.location.search.substr(1);
//alert("string in company.jsp"+prmstr);
var prmarr = prmstr.split ("&");
var params = ;
for ( var i = 0; i < prmarr.length; i++)
var tmparr = prmarr[i].split("=");
// alert("tmparr[0] & tmparr[1] :"+tmparr[0]+" and "+tmparr[1] )
params[tmparr[0]] = tmparr[1];
//alert("value to be selected in company.jsp:"+params.company);
if(params.company=="company1")
$('input:radio[value=company1]').attr('checked',true);
else
if(params.company=="company2")
$('input:radio[value=company2]').attr('checked',true);
else
if(params.company=="company3")
$('input:radio[value=company3]').attr('checked',true);
</script>
<script>
window.onload=checkall() ;
</script>
software.jsp
<script type="text/javascript">
function stripWhiteSpace(arg)
if(arg.replace(/^\s+/,'').replace(/\s+$/,'') == "")
return true;
function AddUrlParameter(a, b, c)
if (stripWhiteSpace(b))
alert("Parameter name should not be empty.");
return a;
if (stripWhiteSpace(c))
alert("Parameter value should not be empty.");
return a;
if (a.indexOf("?") == -1)
return a + "?" + b + "=" + c;
var d = a.split("?");
if (d.length >= 2)
if (stripWhiteSpace(b))
// if (d[1].trim() == "")
return d[0] + "?" + b + "=" + c;
var e = d[1].split(/[&;]/g);
for (var f = 0; f < e.length; f++)
var g = e[f]; var h = g.split("=");
if (h.length >= 2)
if (h[0] == b)
// alert("a :"+a);
// alert("b :"+b);
//alert("c :"+c);
/*
if (stripWhiteSpace(b))
alert("Parameter name should not be empty.");
return a ;
if (stripWhiteSpace(c))
alert("Parameter value should not be empty.");
return a;
var d = "";
var e = false;
var f = false;
if (a.indexOf("?") == -1)
alert("No Url Parameters Found!");
return a;
var g = a.split("?");
if (g.length >= 2)
d = d + g[0] + "?";
var h = g[1].split(/[&;]/g);
for (var i = 0; i < h.length; i++)
var j = h[i];
var k = j.split("=");
if (k.length >= 2)
if (k[0] == b)
f = true; k[1] = c;
d = d + b + "=" + c + "&";
else
d = d + j + "&";
e = true;
if (f == false)
alert("Requested query string not found to remove");
return a;
if (e == true)
d = d.slice(0, d.length - 1);
return d;
*/
alert("Url Parameter with provided name already exists! Try Updating that Url Parameter.");
//UpdateUrlParameter(a, b, c);
//return a;
return a + "&" + b + "=" + c;
</script>
<script type="text/javascript">
/*
function callsoft(a)
alert("hi");
var id=document.getElementById("software");
alert("id :"+id+" value"+a.value);
var $soft = $('input[name=soft]:checked');
var softvalue = $soft.val();
var id = $soft.attr('id');
alert("radio clicked id:"+id+" and value: "+softvalue);
var prmstr = window.location.search.substr(1);
var prmarr = prmstr.split ("&");
var params = ;
for ( var i = 0; i < prmarr.length; i++)
var tmparr = prmarr[i].split("=");
params[tmparr[0]] = tmparr[1];
var company=params.company;
var companyurl="main.jsp?company="+company;
alert(companyurl);
var new_url = AddUrlParameter(companyurl,id,softvalue);
//var new_url = AddUrlParameter(window.location.href,id,softvalue);
window.location.replace(new_url);
*/
$(document).ready(function()
$('.class_sofware').click(function()
var $soft = $('input[name=soft]:checked');
var softvalue = $soft.val();
var id = $soft.attr('id');
alert("radio clicked id:"+id+" and value: "+softvalue);
var prmstr = window.location.search.substr(1);
var prmarr = prmstr.split ("&");
var params = ;
for ( var i = 0; i < prmarr.length; i++)
var tmparr = prmarr[i].split("=");
params[tmparr[0]] = tmparr[1];
var company=params.company;
var companyurl="main.jsp?company="+company;
var new_url = AddUrlParameter(companyurl,id,softvalue);
//var new_url = AddUrlParameter(window.location.href,id,softvalue);
window.location.replace(new_url);
);
);
</script>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<div id="i_all_sw">
<%
Connection conn = null;
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
Connection con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","","");
ResultSet rs = null;
Statement st=null;
st=con.createStatement();
%>
<%
String S_COMPANY=request.getParameter("company");
if(S_COMPANY!=null)
System.out.println(S_COMPANY);
%>
<%
try
rs = st.executeQuery("select DISTINCT(SW_NAME) from maindatabase where COMPANY='"+S_COMPANY+"'");
int i=0;
while(rs.next())
%>
<input type="radio" name="soft" id="software" onclick="callsoft(this);" class="class_sofware" value="<%= rs.getString("SW_NAME") %>"><%= rs.getString("SW_NAME") %><br>
<%
//System.out.println("company count:"+i);
i++;
catch(SQLException e)
System.out.println(e.getMessage());
%>
</div>
<script type="text/javascript">
function checkall()
var prmstr = window.location.search.substr(1);
//alert("string in software.jsp"+prmstr);
var prmarr = prmstr.split ("&");
var params = ;
for ( var i = 0; i < prmarr.length; i++)
var tmparr = prmarr[i].split("=");
params[tmparr[0]] = tmparr[1];
//alert("params.software value to be selected in software.jsp:"+params.software);
$('input:radio[value='+params.software+']').attr('checked',true);
</script>
<script>
window.onload=checkall();
</script>
【问题讨论】:
BalusC 在这里很好地解释了这一点:How to use Servlets and Ajax?,检查MapString, String>
为 <option>
示例。你也可以用它来写<input type="radiobutton" />
,不要限制选项:)。
别担心,BalusC 也解释了这一点。阅读答案并学到很多东西(我之前做过一段时间)
谢谢 :) 我希望能从那里得到帮助 :)
另外,恕我直言,我猜下拉列表 (<select> <option>... </select
) 会比单选按钮更好,但这取决于您的功能要求。
@lata: 哦..你真的需要阅读如何使用 Servlets 和 Ajax?上面提到的cmets。它将减少JSP代码并应提供解决方案。
【参考方案1】:
在main.jsp
做以下代码
<form name="myForm" id="myFormId"
action="/myServlet" method="POST">
1. include company.jsp
2. include software.jsp
3. include location.jsp
4. include dept.jsp
<input type="submit" value="submit">
</form>
注意:company.jsp
和Software.jsp
中的单选按钮名称应相同
当输出到浏览器时,只有一个表单元素,而在表单元素内部,根据包含的 JSP,会有单选按钮和复选框。
【讨论】:
OP 意识到了这一点。主要问题是如何根据选定的company
动态加载software
单选按钮的值,然后不断地...
@lata 最好的方法是 ajax。我认为你需要先学习ajax的技巧。
@Real:这意味着我无法通过 servlet 或 JQuery 获得解决方案?
@lata 在我之前发布的链接中,BalusC 展示了如何使用 ajax 和 jQuery 来调用 Servlet。 请检查一下,进行一些测试并完成工作。
不,它不像你可以在没有 ajax 的情况下做到这一点。让我准备一些示例代码。以上是关于在同一页面中存储选定元素值的位置?的主要内容,如果未能解决你的问题,请参考以下文章