*I have looked at other stack over flow suggestions and tried to implement them so please dont mark this as duplicate. i understand the root cause of this is the null value casting issue.
Hi All
I have a spring application where im trying to show a list of check boxes in a jsp like below.
<form:form method="post" modelAttribute="${alertMsgSetting}" id="alertMsgSetting" name="alertMsgSetting" >
<dl class="dl-horizontal">
<dt>
<samp>SMS Enabled : </samp>
</dt>
<dd>
<%-- <form:checkbox path="sms_enabled" value="1"/> --%>
<input type="checkbox" name="sms_enabled" value="${sms_enabled}"/>
<input type="hidden" name="_sms_enabled" value="on"/>
</dd>
<dt>
<samp>Email Enabled : </samp>
</dt>
<dd>
<input type="checkbox" name="sms_settle_enabled" value="sms_settle_enabled"/>
<input type="hidden" name="sms_settle_enabled" value="on"/>
<%-- <form:checkbox path="sms_settle_enabled" value="1"/> --%>
</dd>
<dt>
<samp>2-way SMS Enabled : </samp>
</dt>
<dd>
<form:checkbox path="sms_enabled"/>
</dd>
<dt>
<samp>SMS Settle Enabled : </samp>
</dt>
<dd>
<form:checkbox path="sms_settle_enabled"/>
</dd>
<dt>
<samp>SMS Load Enabled : </samp>
</dt>
<dd>
<form:checkbox path="sms_load_enabled"/>
</dd>
<dt>
<samp>SMS Unload Enabled : </samp>
</dt>
<dd>
<form:checkbox path="sms_unload_enabled"/>
</dd>
<dt>
<samp>SMS Auth Enabled : </samp>
</dt>
<dd>
<form:checkbox path="sms_auth_enabled"/>
</dd>
<dt>
<samp>SMS Decline Enabled : </samp>
</dt>
<dd>
<form:checkbox path="sms_decline_enabled"/>
</dd>
<dt>
<samp>SMS Chargeback Enabled : </samp>
</dt>
<dd>
<form:checkbox path="sms_chargeback_enabled"/>
</dd>
<dt>
<samp>SMS Promo Enabled : </samp>
</dt>
<dd>
<form:checkbox path="sms_promo_enabled"/>
</dd>
<dt>
<samp>SMS Flagged for failures? : </samp>
</dt>
<dd>
<form:checkbox path="sms_flagged_for_failures"/>
</dd>
<dt>
<samp><input type="button" value="Update" class="btn btn-primary btn-sm" id="updatebtn3" name="updatebtn3"></input></samp>
</dt>
<dd>
<%-- ${message} --%>
</dd>
</dl>
</form:form>
Bean class:
package com.nexis.cardholder.orm.model;
public class AlertMessages {
private int program_id;
private String user_token;
private boolean sms_enabled, sms_settle_enabled, sms_load_enabled, sms_unload_enabled, sms_auth_enabled, sms_decline_enabled, sms_chargeback_enabled, sms_promo_enabled, sms_flagged_for_failures, two_way_enabled, email_alert_enabled;
private String start_time, end_time;
public int getProgram_id() {
return program_id;
}
public void setProgram_id(int program_id) {
this.program_id = program_id;
}
public String getUser_token() {
return user_token;
}
public void setUser_token(String user_token) {
this.user_token = user_token;
}
public String getStart_time() {
return start_time;
}
public void setStart_time(String start_time) {
this.start_time = start_time;
}
public String getEnd_time() {
return end_time;
}
public void setEnd_time(String end_time) {
this.end_time = end_time;
}
public boolean isSms_enabled() {
return sms_enabled;
}
public void setSms_enabled(int sms_enabled) {
this.sms_enabled = (sms_enabled==1)?true:false;
}
public boolean isSms_settle_enabled() {
return sms_settle_enabled;
}
public void setSms_settle_enabled(int sms_settle_enabled) {
this.sms_settle_enabled = (sms_settle_enabled==1)?true:false;
}
public boolean isSms_load_enabled() {
return sms_load_enabled;
}
public void setSms_load_enabled(int sms_load_enabled) {
this.sms_load_enabled = (sms_load_enabled==1)?true:false;
}
public boolean isSms_unload_enabled() {
return sms_unload_enabled;
}
public void setSms_unload_enabled(int sms_unload_enabled) {
this.sms_unload_enabled = (sms_unload_enabled==1)?true:false;
}
public boolean isSms_auth_enabled() {
return sms_auth_enabled;
}
public void setSms_auth_enabled(int sms_auth_enabled) {
this.sms_auth_enabled = (sms_auth_enabled==1)?true:false;
}
public boolean isSms_decline_enabled() {
return sms_decline_enabled;
}
public void setSms_decline_enabled(int sms_decline_enabled) {
this.sms_decline_enabled = (sms_decline_enabled==1)?true:false;
}
public boolean isSms_chargeback_enabled() {
return sms_chargeback_enabled;
}
public void setSms_chargeback_enabled(int sms_chargeback_enabled) {
this.sms_chargeback_enabled = (sms_chargeback_enabled==1)?true:false;
}
public boolean isSms_promo_enabled() {
return sms_promo_enabled;
}
public void setSms_promo_enabled(int sms_promo_enabled) {
this.sms_promo_enabled = (sms_promo_enabled==1)?true:false;
}
public boolean isSms_flagged_for_failures() {
return sms_flagged_for_failures;
}
public void setSms_flagged_for_failures(int sms_flagged_for_failures) {
this.sms_flagged_for_failures = (sms_flagged_for_failures==1)?true:false;
}
public boolean isTwo_way_enabled() {
return two_way_enabled;
}
public void setTwo_way_enabled(int two_way_enabled) {
this.two_way_enabled = (two_way_enabled==1)?true:false;
}
public boolean isEmail_alert_enabled() {
return email_alert_enabled;
}
public void setEmail_alert_enabled(int email_alert_enabled) {
this.email_alert_enabled = (email_alert_enabled==1)?true:false;
}
}
Controller class:
public class AlertSettingsController {
@Autowired
private AlertsDao alertDao;
@Autowired
private UserDao userDao;
//get alerts page
@RequestMapping(value = "/alertSettings**", method=RequestMethod.GET)
public String alerts(HttpServletRequest request, Model m ){
User u = (User) request.getSession(false).getAttribute("user");
System.out.println(u.getUser_token()+"::"+u.getProgram_id());
//get existing values and fill form
SmsTimings phoneAlertForm = new SmsTimings();
AlertMessages alertMsgSetting = new AlertMessages();
alertMsgSetting=alertDao.getAlertMsgSettings(u.getProgram_id(), u.getUser_token());
m.addAttribute("phoneAlertForm", phoneAlertForm);
m.addAttribute("alertMsgSetting", alertMsgSetting);
return "alertSettings";
}
@RequestMapping(value = "/alertSettings**", method=RequestMethod.POST)
public String alertsSave(@ModelAttribute("phoneAlertForm") SmsTimings phoneAlertForm,HttpServletRequest request, Model m ){
User u = (User) request.getSession(false).getAttribute("user");
System.out.println(u.getUser_token()+"::"+u.getProgram_id());
System.out.println(m.toString()+"/n"+phoneAlertForm.getStart()+phoneAlertForm.getEnd()+phoneAlertForm.getTimezone()+ phoneAlertForm.getObserveDayLight());
//get SMS settings
if(phoneAlertForm.getStart()!=null){
String smsSettingStatus=alertDao.smsSettingsUpdate(u.getUser_token(), phoneAlertForm.getStart(), phoneAlertForm.getEnd(), phoneAlertForm.getTimezone());
m.addAttribute("smsSettingStatus", smsSettingStatus);
}else{
String alertSettingStatus=alertDao.alertSettingsUpdate(u.getUser_token());
m.addAttribute("alertSettingStatus", alertSettingStatus);
}
return "alertSettings";
}
}
DAO method:
public AlertMessages getAlertMsgSettings(int program_id, String user_token) {
AlertMessages a = new AlertMessages();
Session session = sessionFactory.openSession();
try {
Query query = session.createSQLQuery("CALL `user_portal`.`Get_Alerts`(:program_id,:userToken)").setParameter("program_id", program_id).setParameter("userToken", user_token);
List<Object[]> results = query.list();
System.out.println(results.get(0)[0]);
for (Object[] objects : results) {
a.setProgram_id((int) objects[0]);
a.setUser_token((String) objects[1]);
a.setSms_enabled((int) objects[2]);
a.setSms_settle_enabled((int) objects[3]);
a.setSms_load_enabled((int) objects[4]);
a.setSms_auth_enabled((int) objects[5]);
a.setSms_decline_enabled((int) objects[6]);
a.setSms_chargeback_enabled((int) objects[7]);
a.setSms_promo_enabled((int) objects[8]);
a.setSms_flagged_for_failures((int) objects[9]);
a.setTwo_way_enabled((int) objects[10]);
a.setEmail_alert_enabled((int) objects[11]);
a.setProgram_id((int) objects[12]);
a.setStart_time((String) ((objects[13]!=null)?objects[13]:""));
a.setEnd_time((String) ((objects[14]!=null)?objects[14]:""));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
session.close();
}
return a;
}
Now when i try to 'get' existing info into the form or post updated info to the form, i get an exception saying
Neither BindingResult nor plain target object for bean name 'com' available as request attribute
When i keep the Bean properties as boolean and try to feed int values into it like below, i get a casting exception
a.setProgram_id((int) objects[0]);
because the database (MYSQL) returns an int. I cant change the database.for technical reasons. how do i solve this problem? it has already killed a day of my time and im under some pressure to finish it. I have looked at other stack over flow suggestions and tried to implement them so please dont mark this as duplicate. i understand the root cause of this is the null value casting issue.
Aucun commentaire:
Enregistrer un commentaire