我是网络编程的新手,我正在尝试构建一个struts应用程序。我想根据从同一页面中的保管箱中选择的选项打印文件或数据库中的值。为了做到这一点,我必须从servlet获取数据并使用javascript在jsp中显示它。但我不知道如何使用javascript显示值。
handler.java(servlet的)
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import net.sf.json.JSONObject;
import net.sf.json.JSONArray;
public class handler extends org.apache.struts.actions.DispatchAction{
private static final String SUCCESS = "success";
public ActionForward Add(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws Exception {
actionFileAndDB obj=new actionFileAndDB();
JSONArray list=obj.view();
request.setAttribute("jsonArray",list);
System.out.println("this is being called");
String s1=request.getParameter("dropdown");
System.out.println("add="+s1);
String s="Karthikeyan";
request.setAttribute("myname",s);
return mapping.findForward(SUCCESS);
}
}
view.jsp的
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="net.sf.json.JSONObject"%>
<%@page import="net.sf.json.JSONArray"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>View</title>
</head>
<body>
<form action="operations.do">
<table>
<tr>
<td>
<select value="s" name="dropdown">
<option>VIEW</option>
<option>Database</option>
<option>File</option>
<option>Both</option>
</select>
</td>
<td>
<input type="hidden" id="f4" value=<%= request.getAttribute("s") %> />
<input type="button" value="Add" name="actionMethod" onclick="viewData();" />
</td>
<td>
<input type="submit" value="Edit" name="actionMethod"/>
</td>
<td>
<input type="submit" value="Delete" name="actionMethod"/>
</td>
</tr>
</table>
</form>
<div id="p1">
asdfasdf
</div>
<script type="text/javascript">
function viewData()
{
document.getElementById("p1").innerHTML=document.getElementById("f4").value;
event.preventDefault();
}
</script>
</body>
</html>
我已尝试将值从javascript显示到jsp,从代码中可以看出,但无法这样做。是否有必要了解JQuery和Ajax才能这样做?请帮帮我。
答案 0 :(得分:0)
我认为我们找到了实现您打算做的事情的方法。首先,我理解用例是用户获得选项selctor(&#39; #dropdown&#39;)并且他们选择一些条目,然后视图查找数据存储(数据库或隐藏在服务器上的文件) )并显示一些信息。这些交互显示的信息完全取决于所选的选项。我做对了吗?
Iff这就是你要做的事情,我们需要三个文件:你原来的StrutsAction(1),你原来的View(JSP)(2),以及另一个StrutsAction,用于我们从服务器传递信息的请求。鉴于(1)和(2)仍然在你的问题中,它们必须在当前运作。 (我希望在大写情况下用Java命名类,例如&#39; Handler&#39; ActionFileAndDB&#39;。)
要在您的课程中获得交互性,请首先使用您的struts中的映射创建新的StrutsAction。 config.xml
个文件。这些必须以JSON表示法提供数据。我会使用Jackson JSON,JAXB或者一些lib来做到这一点。当然,您也可以提供(本地化)字符串。我建议您使用&#39; operations.do&#39;为此。
然后在视图中我们有两个选择:
使用AJAX代替
表单更容易,但我们必须提交此表单(例如,使用提交按钮)才能使更改生效。我们必须重定向到我们原来的观点(反射),因此永远不会离开这个网站。因此,处理对用户来说更糟糕。
使用AJAX具有互动的好处(信息出现在选择之后),我们可以将表单提交到其他地方。
在这种情况下,您可以使用jQuery.get('operations.do').done(...)
首先从服务器加载数据,并在“完成”功能中使用回调功能。并且&#39;失败&#39;该回调函数将显示检索到的数据&#39; (如果&#39;完成(数据)&#39;)或使用您的&#39; p1&#39;上的jQuery('p1').html(data)
或jQuery('p1').html('An error occured!')
的某些错误消息标签。
您也可以使用jQuery.post(...)
。有关用法的更多信息,我发现这有用:https://api.jquery.com/jQuery.get/
在开始实施任何解决方案之前,我会非常清楚地了解信息的传播:因为需要和传递的数据在复杂的应用程序中很难改变。实现在很大程度上取决于您选择的表单(1)或AJAX(2)。
答案 1 :(得分:0)
以下是我发现问题的解决方案:
我将以下代码添加到action类中的'View'方法,即handler.java -
response.setContentType("text/JSON");
try
{
PrintWriter out = response.getWriter();
out.println(o);
out.flush();
}
catch(Exception e)
{
System.out.println(e);
}
return null;
其中“o”是包含JSON对象的JSON数组的JSON对象。
我写了一个执行动作类的脚本 -
var url="http://localhost:8080/MyProjDBandFilesv2/operations.do?dropdown="+dropval+"&actionMethod=View";
其中View是在'handler'类中调用的方法,'url'作为参数传递给JQuery post方法。
'operations.do'的路径在struts-config.xml中定义如下 -
<action path="/operations" type="handler" parameter="actionMethod">
<forward name="success" path="/view.jsp"/>
<forward name="add" path="/AddOrEdit.jsp"/>
</action>