Search code examples
javahibernatestruts2struts2-jquery

How to resolve Error setting date with Struts 2 jQuery


Error setting date with Struts 2 jQuery.

Aug 10, 2021 6:53:26 PM com.opensymphony.xwork2.util.logging.jdk.JdkLogger warn
WARNING: Error setting expression 'DateOfChallan' with value '[Ljava.lang.String;@f063e29'
ognl.MethodFailedException: Method "setDateOfChallan" failed for object com.BillingSystem.domain.Bill@18d2e3dc [java.lang.NoSuchMethodException: com.BillingSystem.domain.Bill.setDateOfChallan([Ljava.lang.String;)]
    at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1305)
    at ognl.OgnlRuntime.setMethodValue(OgnlRuntime.java:1494)
    at ognl.ObjectPropertyAccessor.setPossibleProperty(ObjectPropertyAccessor.java:85)
    at ognl.ObjectPropertyAccessor.setProperty(ObjectPropertyAccessor.java:162)
    at com.opensymphony.xwork2.ognl.accessor.ObjectAccessor.setProperty(ObjectAccessor.java:27)
    at ognl.OgnlRuntime.setProperty(OgnlRuntime.java:2332)

Billtry.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@taglib prefix="sj" uri="/struts-jquery-tags"%>
<html>
<head>
<meta charset="ISO-8859-1">
<link rel="stylesheet" type="text/css" href="/Billing/StyleSheet.css">
<script type="text/javascript" src="${pageContext.request.contextPath}/Billing/jquery-    
 1.9.1.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/Billing/Script.js">    
</script>
<sj:head/>
</head>
<body>
<page size="A4">
<s:iterator value="list" status="rowstatus">
<s:form action="Bill">
<div class="rowmain">
    <table class="leftone">
        <tr>
            <th><s:textfield name="NameOrg" label="M/s." value="%{NameOrg}" size="15" /></th>
            <td></td>
        </tr>
        <tr>
            <th><s:textfield name="GSTOrg" label="GSTOrg" value="%{GSTOrg}" size="15" /></th>
            <td></td>
        </tr>
    </table>

    <table class="rightone"> 
        <tr>
            <th><s:textfield name="InvoiceNo" label="InvoiceNo" size="15" /></th>
            <td></td>

            <th></th>
            **<td><sj:datepicker label="Date" name="DateOfInvoice" displayFormat="yy-mm-dd" 
        required="true" /> </td>**
        </tr>
        <tr>
            <th><s:textfield name="ChallanNo" label="ChallanNo" size="15" /></th>
            <td></td>

            <th></th>
            **<td><sj:datepicker label="DateC" name="DateOfChallan" displayFormat="yy-mm-dd" 
      required="true" /> </td>**
        </tr>
    </table>
 </div>
 <div class="rowmain">
    <table>
        <thead class="th1">
            <tr>
                <th>Sr. No.</th>
                <th>PARTICULARS.</th>
                <th>HSN <br> CODE
                </th>
                <th>%</th>
                <th>RATE</th>
                <th>QTY</th>
                <th>GST <br> AMOUNT
                </th>
                <th>AMOUNT</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td><input type="Number" style="width: 2.5em" name="SrNo" value="1">
                </td>
                <td><textarea name="particulars" rows="4" cols="35"></textarea></td>
                <td valign="middle"><input type="text" size="5" name="HSNCode"></td>
                <td valign="middle"><input type="number" class="input prec1"
                    value="" style="width: 3em" name="Precentage"></td>
                <td valign="middle"><input type="number" name="Rate"
                    class="input rate1" value="" style="width: 5em"></td>
                <td valign="middle"><input type="number" name="QTY"
                    class="input qty1" value="" style="width: 5em"></td>
                <td valign="middle"><input disabled="disabled" id="Gst1"
                    style="width: 6.0em" name="GSTAmount"></td>
                <td valign="middle"><input disabled="disabled"
                    class="text-right" id="result1" name="Amount" class="input result1"
                    value="" style="width: 6.5em"></td>
            </tr>

            <tr>
                <td><input type="Number" style="width: 2.5em" name="SrNo" value="2">
                </td>
                <td><textarea name="particulars" rows="4" cols="35"></textarea></td>
                <td valign="middle"><input type="text" size="5" name="HSNCode"></td>
                <td valign="middle"><input type="number" class="input prec2"
                    value="" style="width: 3em" name="Precentage"></td>
                <td valign="middle"><input type="number" name="Rate"
                    class="input rate2" value="" style="width: 5em"></td>
                <td valign="middle"><input type="number" name="QTY"
                    class="input qty2" value="" style="width: 5em"></td>
                <td valign="middle"><input disabled="disabled" id="Gst2"
                    style="width: 6.0em" name="GSTAmount"></td>
                <td valign="middle"><input disabled="disabled"
                    class="text-right" id="result2" name="Amount" class="input result2"
                    style="width: 6.5em"></td>
            </tr>

            <tr>
                <td><input type="Number" style="width: 2.5em" name="SrNo" value="3">
                </td>
                <td><textarea name="particulars" rows="4" cols="35"></textarea></td>
                <td valign="middle"><input type="text" size="5" name="HSNCode"></td>
                <td valign="middle"><input type="number" class="input prec3"
                    value="" style="width: 3em" name="Precentage"></td>
                <td valign="middle"><input type="number" name="Rate"
                    class="input rate3" value="" style="width: 5em"></td>
                <td valign="middle"><input type="number" name="QTY"
                    class="input qty3" value="" style="width: 5em"></td>
                <td valign="middle"><input disabled="disabled" id="Gst3"
                    style="width: 6.0em" name="GSTAmount"></td>
                <td valign="middle"><input disabled="disabled"
                    class="text-right" id="result3" name="Amount" class="input result3"
                    style="width: 6.5em"></td>
            </tr>

            <tr>
                <td><input type="Number" style="width: 2.5em" name="SrNo" value="4">
                </td>
                <td><textarea name="particulars" rows="4" cols="35"></textarea></td>
                <td valign="middle"><input type="text" size="5" name="HSNCode"></td>
                <td valign="middle"><input type="number" class="input1 prec4"
                    value="" style="width: 3em" name="Precentage"></td>
                <td valign="middle"><input type="number" name="Rate"
                    class="input rate4" value="" style="width: 5em"></td>
                <td valign="middle"><input type="number" name="QTY"
                    class="input qty4" value="" style="width: 5em"></td>
                <td valign="middle"><input disabled="disabled" id="Gst4"
                    style="width: 6.0em" name="GSTAmount"></td>
                <td valign="middle"><input disabled="disabled"
                    class="text-right" id="result4" name="Amount" class="input result4"
                    style="width: 6.5em"></td>
            </tr>

            <tr>
                <td><input type="Number" style="width: 2.5em" name="SrNo" value="5">
                </td>
                <td><textarea name="particulars" rows="4" cols="35"></textarea></td>
                <td valign="middle"><input type="text" size="5" name="HSNCode"></td>
                <td valign="middle"><input type="number" class="input1 prec5"
                    value="" style="width: 3em" name="Precentage"></td>
                <td valign="middle"><input type="number" name="Rate"
                    class="input rate5" value="" style="width: 5em"></td>
                <td valign="middle"><input type="number" name="QTY"
                    class="input qty5" value="" style="width: 5em"></td>
                <td valign="middle"><input disabled="disabled" id="Gst5"
                    style="width: 6.0em" name="GSTAmount"></td>
                <td valign="middle"><input disabled="disabled"
                    class="text-right" id="result5" name="Amount" class="input result5"
                    style="width: 6.5em"></td>
            </tr>

            <tr>
                <td><input type="Number" style="width: 2.5em" name="SrNo" value="6">
                </td>
                <td><textarea name="particulars" rows="4" cols="35"></textarea></td>
                <td valign="middle"><input type="text" size="5" name="HSNCode"></td>
                <td valign="middle"><input type="number" class="input1 prec6"
                    value="" style="width: 3em" name="Precentage"></td>
                <td valign="middle"><input type="number" name="Rate"
                    class="input rate6" value="" style="width: 5em"></td>
                <td valign="middle"><input type="number" name="QTY"
                    class="input qty6" value="" style="width: 5em"></td>
                <td valign="middle"><input disabled="disabled" id="Gst6"
                    style="width: 6.0em" name="GSTAmount"></td>
                <td valign="middle"><input disabled="disabled"
                    class="text-right" id="result6" name="Amount" class="input result6"
                    style="width: 6.5em"></td>
            </tr>
        </tbody>
    </table>
</div>
<div class="rowmain">

    <div class="leftttext">
        <table class="th1">
            <tr>
                <th>Billing Address</th>
                <td><input type="text" name="AddressOrg" value="<s:property 
  value="AddressOrg"/>" size="60" /></td>
            </tr>
            <tr>
                <th>Shipping Address</th>
                <td><input type="text" name="Shipping Address" size="40" /></td>
            </tr>
            <tr>
                <th>Rupees in Words</th>
            
                <td><textarea id="word" name="RupeeWords"  rows="2" cols="60"></textarea></td>
            </tr>
        </table>
    </div>

</div>
<div align="center">Your Address.</div>
    
    <s:submit value="Bill"/>
    </s:form>
    </s:iterator>
    </page>
</body>
</html>

Bill.java

package com.BillingSystem.domain;
import java.util.Date;
import javax.persistence.*;
@Entity
@Table(name="Bill")
public class Bill {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id",nullable = false)
private long id;
@Column(name = "NameOrg", nullable = false)
private String NameOrg;
@Column(name = "AddressOrg", nullable = false)
private String AddressOrg;
@Column(name="GSTOrg",unique = true, nullable = false)
private String GSTOrg;
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "InvoiceNo",unique = true,nullable = false)
private String InvoiceNo;
@Column(name = "ChallanNo",nullable = false)
private String ChallanNo;
@Column(name = "DateOfInvoice",nullable = false)
private Date DateOfInvoice;
@Column(name = "DateOfChallan",nullable = false)
private Date DateOfChallan;
@Column(name = "SrNo",nullable = false)
private String SrNo;
@Column(name = "Particulars",nullable = false)
private String Particulars;
@Column(name = "HSNCode",nullable = false)
private String HSNCode;
@Column(name = "Precentage",nullable = false)
private String Precentage;
@Column(name = "Rate",nullable = false)
private String Rate;
@Column(name = "QTY",nullable = false)
private String QTY;
@Column(name = "GSTAmount",nullable = false)
private String GSTAmount;
@Column(name = "Amount",nullable = false)
private String Amount;
public long getId() {
    return id;
}
public void setId(long id) {
    this.id = id;
}

All Setter / Getter Genrated

BillAction.Java

package com.BillingSystem.Action;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import com.BillingSystem.DAO.DaoBill;
import com.BillingSystem.domain.Bill;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
@SuppressWarnings("serial")

public class BillAction extends ActionSupport implements ModelDriven<Bill>{
private HttpServletRequest request;
private Bill b = new Bill();
private List<Bill> list = new ArrayList<Bill>();
@Override

 public Bill getModel() {
    
    return b;
}
public HttpServletRequest getRequest() {
    return request;
}
public void setRequest(HttpServletRequest request) {
    this.request = request;
}
public List<Bill> getList() {
    return list;
}
public void setList(List<Bill> list) {
    this.list = list;
}
public String saveb() {
    boolean bs = DaoBill.save(b);
    System.out.println("enter save");
    if(bs == true) {
        System.out.println("Data is Save");
        addActionMessage("Client Data has been Save Successfully");
        System.out.println("return save dao");
        return SUCCESS;
    }
    System.out.println("error");
        addActionError("Duplicate Entry or Something went worng please Try Again");
        return ERROR;
    }
 }

DaoBill.java

 package com.BillingSystem.DAO;
 import org.hibernate.Session;
 import org.hibernate.SessionFactory;
 import org.hibernate.Transaction;
 import org.hibernate.cfg.Configuration;
 import com.BillingSystem.domain.Bill;

 public class DaoBill {

public static boolean save(Bill b) {
    // TODO Auto-generated method stub
    boolean flag= true;
    
    SessionFactory factory= new Configuration().configure().buildSessionFactory();
    Session session= factory.openSession();
    Transaction tx= session.beginTransaction();
    
    try {
        System.out.println("enter in try");
        session.save(b);
        tx.commit();
        
    }catch (Exception e) {
        // TODO: handle exception
        flag=false;
        e.printStackTrace();
        tx.commit();
        System.out.println("not working");
    }
    return flag;
}
}

Struts.xml struts2.3

 <!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
        <constant name="struts.devMode" value="true" />
    <package name="com.BillingSystem.Action" extends="struts-default">
    <!--  Bill Mode -->
     <action name="Bill" class="com.BillingSystem.Action.BillAction" method="saveb">
        <result name="success">/Billing/success.jsp</result>
        <result name="error">/Client/ShowERROR.jsp</result>
        <result name="input">/Client/ShowERROR.jsp</result>
     </action>
     </package>
   </struts>

Library enter image description here


Solution

  • The date value is coming as String, so you need to create a method for com.BillingSystem.domain.Bill.setDateOfChallan([Ljava.lang.String;)] .

    There's interesting order of parentheses in the message

    The string value should be converted to Date using format by parsing the value which was coming from jQuery datepicker.

    Similar to this answer where you can find a code example with using SimpleDateFormat for converting the value from action variable to Date.