不使用scriptlet在jsp中显示属性文件的值

时间:2015-03-11 05:12:47

标签: java javascript jsp

我有一个带下拉列表的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;
&#13;
&#13; 的的Javascript
&#13;
&#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;
&#13;
&#13;

2 个答案:

答案 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>