当前位置: 首页 > 面试题库 >

Struts 2-捕获到意外异常,设置为“ xx”

慕容渊
2023-03-14
问题内容

我试图将来自HTML表单的未知数字输入提交给Action类,并通过使用Action类中的request Method(Used
ServletActionContext)来获取Input参数信息。

但是它的投掷

Unexpected Exception caught setting 'xx' on 'class classname Error setting expression 'xx' with value ['yy', ]

由于表单中的输入元素是使用JS动态添加的,因此我无法在Action类中使用getter和setter。

如何处理Action类而没有任何异常?

JSP:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Team Activity Log</title>
<SCRIPT language="javascript">
function addRow(tableid)
{
 var table = document.getElementById(tableid);
  var rowCount = table.rows.length;
   var row = table.insertRow(rowCount);

    var cell1 = row.insertCell(0);
    var element1 = document.createElement("select");
    element1=document.getElementById("sele").cloneNode(true);
    element1.type="select";
    cell1.appendChild(element1);

    var cell2=row.insertCell(1);
    var element2 = document.createElement("input");
    element2.type="text";
    element2.setAttribute("placeholder","E.g:1234");
    cell2.appendChild(element2);

    var cell3=row.insertCell(2);
    var element3 = document.createElement("input");
    element3.type="text";
    element3.setAttribute("placeholder","Brief your work");
    cell3.appendChild(element3);

    var cell4=row.insertCell(3);
    var element4 = document.createElement("input");
    element4.type="text";
        element4.setAttribute("placeholder","MM min");
    cell4.appendChild(element4);


    var cell5=row.insertCell(4);
    var element5 = document.createElement("img");
    element5.src="close.png";
        element5.setAttribute("id","delete");
        element5.setAttribute("onclick","changeImage(this)");
    cell5.appendChild(element5);



    }
function changeImage(temp)
{
(temp.parentElement).parentElement.remove();
}
function convert(tableid,temp2)
{
var table=document.getElementById(tableid);
console.log(table.rows.length);
var hidelement=document.getElementById(temp2);
hidelement.setAttribute("value",table.rows.length-1);
for(var i=1;i<table.rows.length;i++)
{
var tt="tt"+i;
var rf="rf"+i;
var des="des"+i;
var eff="eff"+i;
console.log("executing function");
var elemen=table.rows[i].cells[0].querySelector("*");
elemen.setAttribute("name",tt);
elemen=table.rows[i].cells[1].querySelector("*");
elemen.setAttribute("name",rf);
elemen=table.rows[i].cells[2].querySelector("*");
elemen.setAttribute("name",des);
elemen=table.rows[i].cells[3].querySelector("*");
elemen.setAttribute("name",eff);
}
}
</script>
</head>
<body>
    <INPUT type="button" value="Add Row" onclick="addRow('matrix')" />
    <%@ taglib uri="/struts-tags" prefix="s" %>
    <s:url id="myActionUrl" action="timesheetprocess" />
    <form action=<s:property value="%{myActionUrl}" />> 
    <input type="hidden" id="taskcount" value="5">
<table id="matrix">
<tr>
    <th>Task Type</th>
    <th>Reference ID</th>
    <th>Description</th>
    <th>Efforts</th>
    <th></th>
  </tr>
  <tr>
  <td>
  <select id="sele">
  <option value="" disabled selected>Select your option</option>
           <option value="SR">SR</option>
           <option value="CR">CR</option>
           <option value="ALM">ALM</option>
           <option value="INCIDENT">INCIDENT</option> 
           <option value="OTHER">OTHER</option>
   </select></TD>
   <td>
   <INPUT type="text" placeholder="E.g:1234"/>
   </td>
   <td>
   <INPUT type="text" placeholder="Brief your work"/>
   </td>
   <td>
   <INPUT type="text" placeholder="MM min" />
   </td>
   <td>
   <img id="delete" src="close.png" onclick="changeImage(this)">
   </td>
   </tr><tr>
  <td>
  <select id="sele">
  <option value="" disabled selected>Select your option</option>
           <option value="SR">SR</option>
           <option value="CR">CR</option>
           <option value="ALM">ALM</option>
           <option value="INCIDENT">INCIDENT</option> 
           <option value="OTHER">OTHER</option>
   </select></TD>
   <td>
   <INPUT type="text" placeholder="E.g:1234"/>
   </td>
   <td>
   <INPUT type="text" placeholder="Brief your work"/>
   </td>
   <td>
   <INPUT type="text" placeholder="MM min" />
   </td>
   <td>
   <img id="delete" src="close.png" onclick="changeImage(this)">
   </td>
   </tr>
   <tr>
  <td>
  <select id="sele">
  <option value="" disabled selected>Select your option</option>
           <option value="SR">SR</option>
           <option value="CR">CR</option>
           <option value="ALM">ALM</option>
           <option value="INCIDENT">INCIDENT</option> 
           <option value="OTHER">OTHER</option>
   </select></TD>
   <td>
   <INPUT type="text" placeholder="E.g:1234"/>
   </td>
   <td>
   <INPUT type="text" placeholder="Brief your work"/>
   </td>
   <td>
   <INPUT type="text" placeholder="MM min" />
   </td>
   <td>
   <img id="delete" src="close.png" onclick="changeImage(this)">
   </td>
   </tr>
   <tr>
  <td>
  <select id="sele">
  <option value="" disabled selected>Select your option</option>
           <option value="SR">SR</option>
           <option value="CR">CR</option>
           <option value="ALM">ALM</option>
           <option value="INCIDENT">INCIDENT</option> 
           <option value="OTHER">OTHER</option>
   </select></TD>
   <td>
   <INPUT type="text" placeholder="E.g:1234"/>
   </td>
   <td>
   <INPUT type="text" placeholder="Brief your work"/>
   </td>
   <td>
   <INPUT type="text" placeholder="MM min" />
   </td>
   <td>
   <img id="delete" src="close.png" onclick="changeImage(this)">
   </td>
   </tr>
   <tr>
  <td>
  <select id="sele">
  <option value="" disabled selected>Select your option</option>
           <option value="SR">SR</option>
           <option value="CR">CR</option>
           <option value="ALM">ALM</option>
           <option value="INCIDENT">INCIDENT</option> 
           <option value="OTHER">OTHER</option>
   </select></TD>
   <td>
   <INPUT type="text" placeholder="E.g:1234"/>
   </td>
   <td>
   <INPUT type="text" placeholder="Brief your work"/>
   </td>
   <td>
   <INPUT type="text" placeholder="MM min" />
   </td>
   <td>
   <img id="delete" src="close.png" onclick="changeImage(this)">
   </td>
   </tr>
   </table>
    <INPUT type="button" value="Submit" onclick="convert('matrix','taskcount')" />
 </form> 
   </body>
   </html>

struts.xml中的动作标签

<action name="timesheetprocess" class="com.App.Controller.Timesheet.Timeprocess"
    method="execute">
    <result name="success">Time.jsp</result>
</action>

我的动作课:

import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;

public class Timeprocess {
    public String execute() {

        HttpServletRequest request = ServletActionContext.getRequest();
        String tt="tt";
        String rf="rf";
        String des="des";
        String eff="eff";

        for(int i=0;i<Integer.parseInt(request.getParameter("taskcount"));i++)
        {
            System.out.println("Task Type :"+ request.getParameter(tt+String.valueOf(i)));
            System.out.println("Task Type :"+ request.getParameter(rf+String.valueOf(i)));
            System.out.println("Task Type :"+ request.getParameter(des+String.valueOf(i)));
            System.out.println("Task Type :"+ request.getParameter(eff+String.valueOf(i)));


        }
        return "success";

}
}

问题答案:

您可以通过在操作配置中覆盖拦截器来控制Struts2填充参数的过程。

<action name="timesheetprocess" class="com.App.Controller.Timesheet.Timeprocess"
            method="execute">
   <interceptor-ref name="defaultStack">
      <param name="params.excludeParams">.*</param>
   </interceptor-ref>
   <result name="success">Time.jsp</result>
</action>

在那里,您可以修改拦截器的excludeParams属性,params以从OGNL处理中排除所有参数。

您不应以此方式获得任何异常,但请确保已配置 struts.devMode=false

<constant name="struts.devMode" value="false" />

它应该从输出中删除不必要的警告。如果在日志中仍然收到任何警告或异常,则应配置日志记录框架以抑制输出中的这些警告或错误。



 类似资料:
  • 问题内容: 我正在将一些参数传递给通过查询字符串实现的动作类。 动作类如下。 服务器终端显示以下消息。 即使日志级别为,这些参数的值也可以在操作类中以 在方法中。 如果替换为,则这些消息消失。 类似的表达式表示一个数组。和然而类型的模型中的是,与分别。 我究竟做错了什么? 问题答案: 这里不涉及数组问题(即使看起来像这样):这种异常意味着Struts找不到参数的Setter: 从Parameter

  • 问题 你想捕获一个异常后抛出另外一个不同的异常,同时还得在异常回溯中保留两个异常的信息。 解决方案 为了链接异常,使用 raise from 语句来代替简单的 raise 语句。 它会让你同时保留两个异常的信息。例如: >>> def example(): ... try: ... int('N/A') ... except ValueError as e:

  • imi 框架底层支持将错误转为异常,可以通过 try...catch 来捕获。 默认是不启用的,你可以通过配置来设定错误捕获的等级,并且启用它: 在 config.php 中的 beans 配置 [ 'ErrorLog' => [ 'level' => E_ERROR | E_WARNING | E_PARSE, // 报告 runtime 错误 //

  • 本文向大家介绍未捕获到的SyntaxError:意外标记相关面试题,主要包含被问及未捕获到的SyntaxError:意外标记时的应答技巧和注意事项,需要的朋友参考一下 错误在您的服务器端,当您的服务器端发生错误时,响应将带有html标记“ <”,而在发生错误时php将在错误消息中添加标记。因此,您的json包含html标记,并且由于意外的标记而变得无效。 错误在此数组内 它应该是 (问题来源是描述

  • 问题内容: 我在MooTools脚本中运行AJAX调用,在Firefox中运行正常,但是在Chrome中出现错误,我无法确定原因。注释掉代码以确定错误代码在什么地方不会产生任何结果,我认为这可能与返回JSON有关。在控制台中检查,我看到返回的JSON是这样的: 我没有看到任何问题,为什么会发生此错误? 问题答案: 我刚刚解决了这个问题。导致标准Request调用出现问题的原因是,这是我改用的代码:

  • 问题内容: 我正在为Android开发Java应用程序,目前遇到了一个问题,调试器正在进入catch块,并且ex为何为null?有人看过这样的东西吗? 问题答案: 这听起来像源代码,并且编译的类不同步,因此调试器正在进入错误的块。 尝试进行清理,然后进行重建。

  • 5.10. Recover捕获异常 通常来说,不应该对panic异常做任何处理,但有时,也许我们可以从异常中恢复,至少我们可以在程序崩溃前,做一些操作。举个例子,当web服务器遇到不可预料的严重问题时,在崩溃前应该将所有的连接关闭;如果不做任何处理,会使得客户端一直处于等待状态。如果web服务器还在开发阶段,服务器甚至可以将异常信息反馈到客户端,帮助调试。 如果在deferred函数中调用了内置函