我有一个带下拉列表的jsp,当下拉值更改时,必须使用基于条件的属性值填充jsp中的其他文本框。我通过在jsp中使用scriptlet实现了这一点。任何人都可以在不使用scriptlet的情况下为我提供实现相同目标的解决方案。
JSP
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ page import="java.io.FileInputStream"%>
<%@ page import="java.util.Properties"%>
<%@ page import="java.io.FileNotFoundException" %>
<%@ page import="java.io.InputStream" %>
<%
Properties prop = new Properties();
String propFileName = "server_url.properties";
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(propFileName);
if (inputStream != null) {
prop.load(inputStream);
} else {
throw new FileNotFoundException("property file '" + propFileName + "' not found in the classpath");
}
String demoApp = prop.getProperty("DemoApps_name");
String relDashboard=prop.getProperty("RelDashBoard_name");
String demoAppLinks = prop.getProperty("DemoApps_Links");
String demoAppsdb=prop.getProperty("DemoApps_DataBase");
String demoAppservice=prop.getProperty("DemoApps_WebServices");
%>
<html>
<head>
<meta name="viewport"
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Monitoring Dashboard</title>
</head>
<body style="background: rgb(0, 102, 153);">
<form name="edit" method="post" action="UpdateDetails" onsubmit="return validation();">
<center>
<fieldset
style="border-color:white ;float: none; ">
<table class="edit" cellpadding="20" >
<tr ><td align="left" style="color: white;" >Application Name: </td><td align="left"><select id="appName" name="appName" class="dropdown" onchange="return OnSelectionChange(appName);"><option value="Application">Select Application</option><option value="Demo Application">Demo Application</option>
<option value="Reliability DashBoard">Reliability DashBoard</option></select></td></tr>
<tr><td align="left" style="color: white;" >Application Link:<font color="red">*</font> </td><td align="left"><textarea rows="4" cols="20" id="appLink" name="appLink" required ></textarea></td></tr>
<tr><td align="left" style="color: white;" >Application Database:<font color="red">*</font> </td><td align="left"><input id="appDB" name="appDB" type="text" required></td></tr>
<tr><td align="left" style="color: white;" >Application Webservices:<font color="red">*</font> </td><td align="left"><textarea rows="4" cols="20" id="appWebService" name="appWebService" required></textarea></td></tr></table>
<input type="submit" value="Save">
</fieldset>
</center>
</form>
</div>
</body>
</html>
&#13;
<script type="text/javascript">
function OnSelectionChange(appName) {
var selectedOption = appName.options[appName.selectedIndex];
var demoLink=document.getElementById('appLink');
var demodb=document.getElementById('appDB');
var demoWebService=document.getElementById('appWebService');
var demoAppName='<%=demoApp%>';
var relDashboardName='<%=relDashboard%>';
var demoAppLinks='<%=demoAppLinks%>';
var demoAppsdb='<%=demoAppsdb%>';
var demoAppWebServices='<%=demoAppservice%>';
if(selectedOption.value==demoAppName){
demoLink.value=demoAppLinks;
demodb.value=demoAppsdb;
demoWebService.value=demoAppWebServices;
}
if(selectedOption.value=='Application'){
demoLink.value='';
demodb.value='';
demoWebService.value='';
}
}
</script>
&#13;
答案 0 :(得分:0)
移动代码以获取任何其他Servlet上的属性文件值,并从那里返回所有需要的值,如 demoApp,value1#relDashboard,value2 ... ,这样在String和JSP中,在你的函数中对这个servlet进行AJAX调用,你将收到String,如下所示:
$.post("/path_to_the_servlet", function(data) {
var selectedOption = appName.options[appName.selectedIndex];
var demoLink=document.getElementById('appLink');
var demodb=document.getElementById('appDB');
var demoWebService=document.getElementById('appWebService');
var param1 = data.split("#");
for(var i=0;i<param1.length;i++) {
var param2=param1[i].split(",");
if(param2[0]=="demoAppName")
var demoAppName=param2[1];
if(param2[0]=="relDashboardName")
var relDashboardName=param2[1];
.
.
.
//all like this
}
});
答案 1 :(得分:0)
首先,您将创建一个Servlet来执行IO部分。 本质上,您不是直接调用JSP,而是调用Servlet(通过将一些URL映射到它 - 您需要阅读如何配置它)。
然后,Servlet加载信息并使其可用于JSP(通过请求对象),然后转发到JSP进行渲染。 JSP可以使用简单的JSP Eexpression语言来访问属性:public class MyServlet extends HttpServlet{
Properties prop = new Properties();
String propFileName = "server_url.properties";
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(propFileName);
if (inputStream != null) {
prop.load(inputStream);
request.setAttribute("properties", properties);
} else {
throw new FileNotFoundException("property file '" + propFileName + "' not found in the classpath");
}
request.getRequestDispatcher("myJsp.jsp").forward(request, response):
}
然后您可以在JSP中使用简单的EL表达式:
<html>
<head>
<script type="text/javascript">
var relDashboardName="${properties.getPropery('relDashboard'}";
var demoAppLinks="${properties.getPropery('demoAppLinks'}";
</script>
</head>
<body >
</html>