Struts 2-捕获到意外异常,设置为"xx" [英] Struts 2 - Unexpected Exception caught setting 'xx'

查看:82
本文介绍了Struts 2-捕获到意外异常,设置为"xx"的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am trying to submit unknown number input from HTML Form to Action class and fetch the Input parameter information by using request Method(Used ServletActionContext) in the Action class.

但是它会抛出

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

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

Since input elements in the form are adding dynamically using JS, i am not in the position to have getters and setters in the Action class.

如何在没有任何异常的情况下处理Action类?

How to process the Action class without any exceptions?

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 tag in 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填充参数的过程.

You can control the process of parameters population by Struts2 via overriding interceptors in the action config.

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

您可以在其中修改params拦截器的excludeParams属性,以排除所有参数,使其无法通过OGNL处理.

There you modify the excludeParams property of the params interceptor to exclude all parameters from processing via OGNL.

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

You should not get any exception in this way, but make sure you have configured struts.devMode=false

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

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

It should remove unnecessary warnings from the output. If you still get any warnings or exceptions in the log, then you should configure your logging framework to suppress those warnings or errors from the output.

这篇关于Struts 2-捕获到意外异常,设置为"xx"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆