- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不熟悉在 Servlet 中使用 Java Bean,并且在从 HttpServletRequest 对象访问 bean 时遇到问题。当我使用 getAttribute() 时,它返回 null。这是我的代码:
Station.jsp - JSP:
<!--
@author - Dylan Stout
7/19/2016
Description: Station Screen -- Takes scanner input to three fields: fromStation, toStation, toLoad
Javascript is used to handle cursor position,incrementing fields, and button-press for load releasing.
PickProcess java bean holds the session information necessary to verify and send/recieve messages to wrxj
back-end.
Each input field is it's own form so no handling for carriage returns is needed (symbol guns usually
send carriage return after scan)
-->
<%@ 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">
<jsp:useBean id="pickProcess" class="com.wynright.scanui.model.PickProcess" scope="session"/>
<jsp:useBean id="fromStation" class="com.wynright.scanui.model.FromStation" scope="request"/>
<jsp:useBean id="toStation" class="com.wynright.scanui.model.ToStation" scope="request"/>
<jsp:useBean id="toLoad" class="com.wynright.scanui.model.ToLoad" scope="request"/>
<html>
<head>
<meta name="viewport" content="width=240, height=320, user-scalable=no,
initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0" />
<link type="text/css" rel="stylesheet" href="css/scanui.css">
<script type="text/javascript" src="scripts/jquery-3.1.0.min.js"></script>
<script type="text/javascript" src="scripts/formController.js"></script>
<script type="text/javascript" src="scripts/station.js"></script>
<noscript>JavaScript is off. Please enable to use ScanUI.</noscript>
<title>Station Pick - Scan UI</title>
</head>
<%
if(fromStation.hasErrors()){
%>
<body OnLoad="onBodyLoad();focusFromStation();">
<%
}else if(toStation.hasErrors()) {
%>
<body OnLoad="onBodyLoad();focusToStation();">
<%
}else if(toLoad.hasErrors()){
%>
<body OnLoad="onBodyLoad();focusToLoad();">
<%
}else{
%>
<body OnLoad="onBodyLoad();focusNext();">
<%
}
%>
<table cellpadding=4 cellspacing=2>
<th bgcolor="#CCCCFF" colspan=2><font size=2>Station Pick</font></th>
<tr bgcolor="#c8d8f8">
<td valign=top><form name="fromStation" action="ValidateFromStation" method=post>
From Station: <input type="text" name="value"
value='<%=pickProcess.getFromStation()%>' size=5 maxlength=5 tabindex="1">
<br>
<font size=2 color=red><%=fromStation.getErrorMsg("fromStation")%></font>
</form></td>
<td valign=top><form name="toStation" action="validateToStation.jsp" method=post>
To Station: <input type="text" name="value"
value='<%=pickProcess.getToStation()%>' size=5 maxlength=5 tabindex="2">
<br>
<font size=2 color=red><%=toStation.getErrorMsg("toStation")%></font>
</form></td>
</tr>
<tr bgcolor="#c8d8f8">
<td valign=top colspan="2"><form name="toLoad" action="validateToLoad.jsp" method=post>
To Load: <input type="text" name="value"
value='<%=pickProcess.getToLoad()%>' size=34 maxlength=30 tabindex="3">
<br>
<font size=2 color=red><%=toLoad.getErrorMsg("toLoad")%></font>
</form></td>
</tr>
</table>
</body>
</html>
ValidateFromStation - Servlet:
/**
*
*/
package com.wynright.scanui.action;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import com.scanui.model.FromStation;
/**
* @author dystout
* Date: Jul 21, 2016
*
* Description: TODO
*/
public class ValidateFromStation extends HttpServlet{
/**
*
*/
private static final long serialVersionUID = 6201980136409592032L;
protected static Logger logger = Logger.getLogger(ValidateFromStation.class);
protected FromStation fromStation = null;
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException,ServletException{
fromStation = (FromStation)request.getSession(false).getAttribute("fromStation");
fromStation.setValue(request.getParameter("value"));
if(fromStation.validate()){
logger.debug("From Station Validated: " + fromStation.getValue());
RequestDispatcher rd = request.getRequestDispatcher("Station.jsp");
rd.include(request, response);
}else{
logger.debug("From Station INVALID, not validated: " + fromStation.getValue());
RequestDispatcher rd = request.getRequestDispatcher("Station.jsp");
rd.include(request,response);
}
}
}
FromStation Java Bean:
package com.wynright.scanui.model;
import java.util.Hashtable;
import com.daifukuamerica.wrxj.application.Application;
import com.daifukuamerica.wrxj.application.PropertiesStack;
import com.daifukuamerica.wrxj.custom.piolax.dataserver.PiolaxPickServer;
import com.daifukuamerica.wrxj.jdbc.DBCommException;
import com.daifukuamerica.wrxj.jdbc.DBException;
import com.daifukuamerica.wrxj.jdbc.DBResultSet;
import com.wynright.scanui.connectionFactory.DBConnection;
public class FromStation extends ScanField{
@Override
public boolean validate(){
if(value.equals("")){
errors.put("fromStationNumber", "Please scan/enter valid station");
}
String sql = "SELECT SDESTINATIONSTATION FROM ORDERHEADER WHERE SDESTINATIONSTATION = '" + getValue() + "'";
DBResultSet results = null;
if(DBConnection.getWrxjConnection().isConnectionActive()){
try {
results= DBConnection.getWrxjConnection().execute(sql, null);
} catch (DBCommException | DBException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(results != null && results.getRowCount()!=0){
isValidated = true;
}
//TODO -- Add WRXJ server validate (JSON)
return isValidated;
}
}
Tomcat 7 Web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>RFUI</display-name>
<listener>
<listener-class>com.wynright.scanui.connectionFactory.DBConnectionService</listener-class>
</listener>
<servlet>
<servlet-name>ValidateFromStation</servlet-name>
<servlet-class>com.wynright.scanui.action.ValidateFromStation
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ValidateFromStation</servlet-name>
<url-pattern>/ValidateFromStation/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>ValidateLogin</servlet-name>
<servlet-class>com.wynright.scanui.action.ValidateLogin
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ValidateLogin</servlet-name>
<url-pattern>/ValidateLogin/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>ValidatePickingFromStation</servlet-name>
<servlet-class>com.wynright.scanui.action.ValidatePickingFromStation
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ValidatePickingFromStation</servlet-name>
<url-pattern>/ValidatePickingFromStation/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>ValidatePickingToStation</servlet-name>
<servlet-class>com.wynright.scanui.action.ValidatePickingToStation
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ValidatePickingToStation</servlet-name>
<url-pattern>/ValidatePickingToStation/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>ValidateSerialNumber</servlet-name>
<servlet-class>com.wynright.scanui.action.ValidateSerialNumber
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ValidateSerialNumber</servlet-name>
<url-pattern>/ValidateSerialNumber/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>ValidateToLoad</servlet-name>
<servlet-class>com.wynright.scanui.action.ValidateToLoad
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ValidateToLoad</servlet-name>
<url-pattern>/ValidateToLoad/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>ValidateToStation</servlet-name>
<servlet-class>com.wynright.scanui.action.ValidateToStation
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ValidateToStation</servlet-name>
<url-pattern>/ValidateToStation/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
最佳答案
我想我已经解决了这个问题。我相信我没有正确使用整个 bean。仍然有可能我使用 HttpSession 和 HttpServletRequest 和 HttpServletResponse 的全部目的是错误的,所以如果我是某人请指教。
我的问题是我正尝试使用 jsp 标记来加载我的 bean,如下所示:
<jsp:useBean id="fromStation" class="com.wynright.scanui.model.FromStation" scope="request"/>
它将我的 bean 设置为“请求”的范围,但该请求实际上将在下一次页面加载时被清除,从而导致空值。我重组了我的代码以允许 session 处理我在页面之间传递的对象。我不确定这是否是好的做法,因为我经常听说 session 只应在绝对必要时保留对象。我在别处读到你也可以使用 cookie 来保存这些信息,但 session 似乎更清晰。
这是我修改后的代码,供其他人引用:
在之前的 servlet - ValidateLogin 中,我使用 PickProcess 对象设置 session 属性,该对象包含我的 FromStation(以及所有其他扫描字段)对象:
/**
*
*/
package com.wynright.scanui.action;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.log4j.Logger;
import com.daifukuamerica.wrxj.dataserver.standard.StandardUserServer;
import com.daifukuamerica.wrxj.jdbc.DBException;
import com.wynright.scanui.core.UserSession;
import com.wynright.scanui.model.PickProcess;
/**
* @author dystout
* Date: Jul 21, 2016
*
* Description: TODO
*/
public class ValidateLogin extends HttpServlet{
/**
*
*/
private static final long serialVersionUID = 1L;
protected static Logger logger = Logger.getLogger(ValidateLogin.class);
protected UserSession user = new UserSession();
protected int loginCode = -1;
protected StandardUserServer userServer = null;
private PickProcess pickProcess = null;
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException,ServletException{
pickProcess = new PickProcess();
HttpSession session = request.getSession();
user.setSessionId(session.getId());
user.setUserName(request.getParameter("userName"));
user.setPassword(request.getParameter("password"));
if(validateLogin("'" + user.getUserName().toString() + "'", user.getPassword().toString() , user.getSessionId())){
//validate login - redirect (add pickPrcess to session)
logger.debug("Login Successful for: " + user.getUserName() + " Session ID: " + user.getSessionId());
RequestDispatcher rd = request.getRequestDispatcher("station.jsp");
pickProcess.setUserName(user.getUserName());
session.setAttribute("pickProcess", pickProcess);
session.setAttribute("user", user);
rd.include(request, response);
}else{
// retry login with error code
logger.debug("Login Unsuccessful for: " + user.getUserName());
RequestDispatcher rd = request.getRequestDispatcher("login.jsp");
request.setAttribute("user", user);
rd.include(request,response);
}
}
public boolean validateLogin(String username, String password, String sessionId){
InetAddress ip = null;
String machineName = "";
try {
ip = InetAddress.getLocalHost();
machineName = ip.getHostName();
} catch (UnknownHostException e) {
logger.error("*** Could not determine host IP Address during login validation ***");
logger.error(e.getMessage());
}
if(ip!=null){
user.setIpAddress(ip.getHostAddress());
user.setMachineName(machineName);
}else{
logger.error("Unable to retrieve IP Address");
}
try {
logger.debug("Attempting to login user: " + username);
loginCode = userServer.validateLogin(username, password, "'" + machineName + "'", "'" + user.getIpAddress() + "'");
} catch (DBException e) {
logger.error("Error validating login, Database problem exists.");
e.printStackTrace();
}
if(loginCode == userServer.LOGIN_OKAY){
user.setValidated(true);
}else{
switch(loginCode){
case -1:
user.setLoginError("Login Invalid");
break;
case -2:
user.setLoginError("Login has Expired");
break;
case -3:
user.setLoginError("Login is in use");
break;
}
}
// return user.isValidated();
//TODO DEBUG
return true;
}
public ValidateLogin(){
userServer = new StandardUserServer("OracleDB");
}
public StandardUserServer getUserServer() {
return userServer;
}
public void setUserServer(StandardUserServer userServer) {
this.userServer = userServer;
}
}
然后在我的 JSP station.jsp 中,我可以使用表达式语言使用 ${bean.beanvalue} 的标签访问 bean directyle(有关更多信息:Which variables can be accessed with the ${...} syntax in a Struts tag in a JSP page? ) 这是我在 station.jsp 中用来访问值的代码:
<!--
@author - Dylan Stout
7/19/2016
Description: Station Screen -- Takes scanner input to three fields: fromStation, toStation, toLoad
Javascript is used to handle cursor position,incrementing fields, and button-press for load releasing.
PickProcess java bean holds the session information necessary to verify and send/recieve messages to wrxj
back-end.
Each input field is it's own form so no handling for carriage returns is needed (symbol guns usually
send carriage return after scan)
-->
<%@ 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">
<html>
<head>
<meta name="viewport" content="width=240, height=320, user-scalable=no,
initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0" />
<link type="text/css" rel="stylesheet" href="css/scanui.css">
<script type="text/javascript" src="scripts/jquery-3.1.0.min.js"></script>
<script type="text/javascript" src="scripts/formController.js"></script>
<script type="text/javascript" src="scripts/station.js"></script>
<noscript>JavaScript is off. Please enable to use ScanUI.</noscript>
<title>Station Pick - Scan UI</title>
</head>
<body onload="onBodyLoad()">
<table cellpadding=4 cellspacing=2 id="stationTable">
<th bgcolor="#CCCCFF" colspan=2><font size=2>Station Pick : ${pickProcess.userName}</font></th>
<tr bgcolor="#c8d8f8">
<td valign=top>
<form name="fromStation" action="${pageContext.request.contextPath}/ValidateFromStation" method=post id="fromStationForm">
From Station: <input type="text" name="value" id="fromStation" value='${pickProcess.fromStation}' size=5 maxlength=5 tabindex="1">
<font size=2 color=red><br> ${fromStation.error}</font>
</form>
</td>
<td valign=top>
<form name="toStation" action="${pageContext.request.contextPath}/ValidateToStation" method=post id="toStation">
To Station: <input type="text" name="value" value='${pickProcess.toStation}' size=5 maxlength=5 tabindex="2">
<font size=2 color=red><br> ${toStation.error}</font>
</form>
</td>
</tr>
<tr bgcolor="#c8d8f8">
<td valign=top colspan="2"><form name="toLoad" action="${pageContext.request.contextPath}/ValidateToLoad" method=post id="toLoad">
To Load: <input type="text" name="value"
value='${pickProcess.toLoad}' size=34 maxlength=30 tabindex="3">
<font size=2 color=red><br> ${toLoad.error}</font>
</form></td>
</tr>
</table>
</body>
</html>
此时,由于我在 ValidateLogin servlet 中设置了属性:
session.setAttribute("pickProcess", pickProcess);
然后我可以在这个 session 存在的任何地方检索它:
PickProcess pickProcess = (PickProcess)session.getAttribute("pickProcess");
如果没有收到空值,我将无法检索 session 属性。
关于spring - 无法访问Servlet中的Java Bean,getAttribute()返回null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38514897/
我正在编写一个具有以下签名的 Java 方法。 void Logger(Method method, Object[] args); 如果一个方法(例如 ABC() )调用此方法 Logger,它应该
我是 Java 新手。 我的问题是我的 Java 程序找不到我试图用作的图像文件一个 JButton。 (目前这段代码什么也没做,因为我只是得到了想要的外观第一的)。这是我的主课 代码: packag
好的,今天我在接受采访,我已经编写 Java 代码多年了。采访中说“Java 垃圾收集是一个棘手的问题,我有几个 friend 一直在努力弄清楚。你在这方面做得怎么样?”。她是想骗我吗?还是我的一生都
我的 friend 给了我一个谜语让我解开。它是这样的: There are 100 people. Each one of them, in his turn, does the following
如果我将使用 Java 5 代码的应用程序编译成字节码,生成的 .class 文件是否能够在 Java 1.4 下运行? 如果后者可以工作并且我正在尝试在我的 Java 1.4 应用程序中使用 Jav
有关于why Java doesn't support unsigned types的问题以及一些关于处理无符号类型的问题。我做了一些搜索,似乎 Scala 也不支持无符号数据类型。限制是Java和S
我只是想知道在一个 java 版本中生成的字节码是否可以在其他 java 版本上运行 最佳答案 通常,字节码无需修改即可在 较新 版本的 Java 上运行。它不会在旧版本上运行,除非您使用特殊参数 (
我有一个关于在命令提示符下执行 java 程序的基本问题。 在某些机器上我们需要指定 -cp 。 (类路径)同时执行java程序 (test为java文件名与.class文件存在于同一目录下) jav
我已经阅读 StackOverflow 有一段时间了,现在我才鼓起勇气提出问题。我今年 20 岁,目前在我的家乡(罗马尼亚克卢日-纳波卡)就读 IT 大学。足以介绍:D。 基本上,我有一家提供簿记应用
我有 public JSONObject parseXML(String xml) { JSONObject jsonObject = XML.toJSONObject(xml); r
我已经在 Java 中实现了带有动态类型的简单解释语言。不幸的是我遇到了以下问题。测试时如下代码: def main() { def ks = Map[[1, 2]].keySet()
一直提示输入 1 到 10 的数字 - 结果应将 st、rd、th 和 nd 添加到数字中。编写一个程序,提示用户输入 1 到 10 之间的任意整数,然后以序数形式显示该整数并附加后缀。 public
我有这个 DownloadFile.java 并按预期下载该文件: import java.io.*; import java.net.URL; public class DownloadFile {
我想在 GUI 上添加延迟。我放置了 2 个 for 循环,然后重新绘制了一个标签,但这 2 个 for 循环一个接一个地执行,并且标签被重新绘制到最后一个。 我能做什么? for(int i=0;
我正在对对象 Student 的列表项进行一些测试,但是我更喜欢在 java 类对象中创建硬编码列表,然后从那里提取数据,而不是连接到数据库并在结果集中选择记录。然而,自从我这样做以来已经很长时间了,
我知道对象创建分为三个部分: 声明 实例化 初始化 classA{} classB extends classA{} classA obj = new classB(1,1); 实例化 它必须使用
我有兴趣使用 GPRS 构建车辆跟踪系统。但是,我有一些问题要问以前做过此操作的人: GPRS 是最好的技术吗?人们意识到任何问题吗? 我计划使用 Java/Java EE - 有更好的技术吗? 如果
我可以通过递归方法反转数组,例如:数组={1,2,3,4,5} 数组结果={5,4,3,2,1}但我的结果是相同的数组,我不知道为什么,请帮助我。 public class Recursion { p
有这样的标准方式吗? 包括 Java源代码-测试代码- Ant 或 Maven联合单元持续集成(可能是巡航控制)ClearCase 版本控制工具部署到应用服务器 最后我希望有一个自动构建和集成环境。
我什至不知道这是否可能,我非常怀疑它是否可能,但如果可以,您能告诉我怎么做吗?我只是想知道如何从打印机打印一些文本。 有什么想法吗? 最佳答案 这里有更简单的事情。 import javax.swin
我是一名优秀的程序员,十分优秀!