gpt4 book ai didi

java - 提交包含 的页面时出现异常

转载 作者:行者123 更新时间:2023-12-02 04:21:56 25 4
gpt4 key购买 nike

我正在使用 Struts2 开发一个项目。其中有一个动态下拉菜单。每当我选择值并提交页面时,我都会遇到异常。我尝试了几种替代方法,但没有任何效果对我有用。下面是异常堆栈跟踪。

SEVERE: Servlet.service() for servlet jsp threw exception
tag 'select', field 'list', name 'locname': The requested list key 'requestListLocationInfo' could not be resolved as a collection/array/map/enumeration/iterator type. Example: people or people.{name} - [unknown location]
at org.apache.struts2.components.Component.fieldError(Component.java:260)
at org.apache.struts2.components.Component.findValue(Component.java:356)
at org.apache.struts2.components.ListUIBean.evaluateExtraParams(ListUIBean.java:84)
at org.apache.struts2.components.Select.evaluateExtraParams(Select.java:104)
at org.apache.struts2.components.UIBean.evaluateParams(UIBean.java:886)
at org.apache.struts2.components.UIBean.end(UIBean.java:535)
at org.apache.struts2.views.jsp.ComponentTagSupport.doEndTag(ComponentTagSupport.java:42)
at org.apache.jsp.AddReader_jsp._jspx_meth_s_005fselect_005f0(AddReader_jsp.java:592)
at org.apache.jsp.AddReader_jsp._jspx_meth_s_005fform_005f0(AddReader_jsp.java:426)
at org.apache.jsp.AddReader_jsp._jspService(AddReader_jsp.java:332)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:720)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:466)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:391)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:318)
at org.apache.struts2.result.ServletDispatcherResult.doExecute(ServletDispatcherResult.java:173)
at org.apache.struts2.result.StrutsResultSupport.execute(StrutsResultSupport.java:208)
at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:373)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:277)
at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:253)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247)
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247)
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:260)
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:52)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247)
at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.doIntercept(ConversionErrorInterceptor.java:139)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:134)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:134)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247)
at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:199)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247)
at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:69)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247)
at org.apache.struts2.interceptor.DateTextFieldInterceptor.intercept(DateTextFieldInterceptor.java:115)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247)
at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:88)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247)
at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:246)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247)
at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:99)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247)
at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:139)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247)
at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:157)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247)
at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:174)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247)
at org.apache.struts2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:123)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247)
at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:171)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247)
at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:201)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247)
at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:193)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247)
at org.apache.struts2.factory.StrutsActionProxy.execute(StrutsActionProxy.java:53)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:577)
at org.apache.struts2.dispatcher.ExecuteOperations.executeAction(ExecuteOperations.java:81)
at org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:143)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)

JSP代码

                        <s:if test="hasActionMessages()">
<div class="welcome">
<s:actionmessage />
</div>
</s:if>
<s:elseif test="hasActionErrors()">
<div class="errors">
<s:actionerror />
</div>
</s:elseif>
<div id="myDIV" style="margin-top: 8%; margin-left: 25%;">

<label>Reader IP:</label>&nbsp <input type="text" name="readerIp" id="readerIp" required>&nbsp &nbsp &nbsp <br>
<label>Antenna ID:</label>&nbsp <input type="text" name="antennaId" id="antennaId" required>&nbsp
&nbsp &nbsp <br> <label>Select Gate:</label>&nbsp
<s:select id="locname" name="locname" list = "requestListLocationInfo" listKey = "locId" listValue = "locname" headerKey = "-1" headerValue = "Select Gate" />
<br>
<button class="btn" id="newBtn"
style="margin-top: 2%; margin-left: 17%; width: 17%; text-decoration: none;"
onclick="clickedMe(this.id)">Add</button>
</div>
</s:form>


Action类中的方法:

    private String msg;

public String getMsg() {
return msg;
}

public void setMsg(String msg) {
this.msg = msg;
}

public String addReaderConfig() {
HttpServletRequest req = ServletActionContext.getRequest();
try {
String locName = req.getParameter("newButton");
int locationid = Integer.parseInt(locName);
String readerIp = req.getParameter("readerIp");
String antenaID = req.getParameter("antennaId");
int antennaId = Integer.parseInt(antenaID);
String created_by = req.getParameter("created_by");
String company_id = (String) ActionContext.getContext().getSession().get("company_id");
int companyId = Integer.parseInt(company_id);
int i = ChartDAO.addReader(readerIp, antennaId, locationid, companyId, created_by);
if (i > 0) {
msg = Constants.READER_ADDED_SUCCESSFULLY;
addActionMessage(msg);
} else {
msg = Constants.READER_ADDING_FAILED;
addActionError(msg);
return Constants.ERROR;
}
} catch (Exception e) {
e.printStackTrace();
return Constants.ERROR;
}
return Constants.SUCCESS;
}

POJO

private int locId;
private String locname;
private List < ChartPOJO > requestListLocationInfo = null;
public String getLocname() {
return locname;
}
public void setLocname(String locname) {
this.locname = locname;
}
public int getLocId() {
return locId;
}
public void setLocId(int locId) {
this.locId = locId;
}
public List < ChartPOJO > getRequestListLocationInfo() {
return requestListLocationInfo;
}
public void setRequestListLocationInfo(List < ChartPOJO > requestListLocationInfo) {
this.requestListLocationInfo = requestListLocationInfo;
}

DAO类中的方法

public static int addReader(String readerIp, int antennaId, int locId, int company_id, String created_by) {
int status = 0;
String driverClass = Constants.DB_Driver;
Class.forName(driverClass);
String url = Constants.DB_Address;
String username = Constants.DB_Username;
String password = Constants.DB_Password;
try (Connection conn = DriverManager.getConnection(url, username, password);) {
try (PreparedStatement ps1 = conn.prepareStatement("select locationid,loc_name from locations where locationid=?");) {
ps1.setInt(1, locId);
try (ResultSet rs2 = ps1.executeQuery();) {
if (!rs2.next()) {
String query = "INSERT INTO reader(ipaddress,antenaid,companyid,locationid,status,created_by,created_date) values(?,?,?,?,?,?,?)";
try(PreparedStatement ps = conn.prepareStatement(query);) {
ps.setString(1, readerIp);
ps.setInt(2, antennaId);
ps.setInt(3, company_id);
ps.setInt(4, locId);
ps.setInt(5, 1);
ps.setString(6, created_by);
LocalDateTime now = LocalDateTime.now();
System.out.println("Before : " + now);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formatDateTime = now.format(formatter);
System.out.println("After : " + formatDateTime);
ps.setString(7, formatDateTime);
status = ps.executeUpdate();
System.out.println("after adding reader successfully");
}
} else {
System.out.println("location already exists");
}
}
}
} catch (Exception e) {
e.printStackTrace();
e.getMessage();
return status;
}
return status;
}


我可以知道这个异常的原因以及如何修复它吗?提前致谢。

最佳答案

您必须删除 listKey 或在项目中某处的选择字段中解决它。

您的日志提示 requestListLocationInfo 列表可能没有正确的 listKey 值或具有 null 值

关于java - 提交包含 <s :select> 的页面时出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56631226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com