toksis
toksis

Reputation: 129

How to post error messages to the HTML from in Struts 2?

I have a register program. When I insert a record on the database, I'll instantiate a class and invoke the method insert(). When I insert a the same record, of course there is a duplicate data error and tons of error messages. I want to capture them with try-catch. I can do that. However, I have no idea how to display the error messages to the JSP.

What I have understood, in an action class, there's validate() method, and the validation.xml is running first. The insert duplicate error happened after those methods are invoked.

import com.opensymphony.xwork2.ActionSupport;
import lotmovement.business.crud.InsertUserProfile;
import lotmovement.business.entity.UserProfile;
import org.apache.commons.lang3.StringUtils;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class RegisterAction extends ActionSupport {

    private static String userId;
    private static String password;
    private static String firstName;
    private static String lastName;
    private static int securityLevel;

    @Override
     public String execute() {    
         ApplicationContext context = 
                 new ClassPathXmlApplicationContext("spring.xml");
     
          InsertUserProfile iup = 
                 (InsertUserProfile)context.getBean("insertuserprofile");
         iup.Insert();       
    
      return SUCCESS;
    }

Here is my insert user profile method of

 public void Insert() {          
    ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
    UserProfile up = (UserProfile)context.getBean("userprofile");
    RegisterAction ra = (RegisterAction)context.getBean("registeraction");
    EntityStart es = (EntityStart)context.getBean("entitystart");
    
    es.StartDbaseConnection();
            
    up.setUserId(ra.getUserId());
    up.setFirstName(ra.getFirstName());
    up.setLastName(ra.getLastName());
    up.setPassword(ra.getPassword());
    up.setSecurityLevel(ra.getSecurityLevel());
    
    es.StartPopulateTransaction(up);
    
    es.CloseDbaseConnection();        
}

This is my JSP:

<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  <link rel="stylesheet" type="text/css" href="CSS/register.css">
  <title>Register</title>
  <s:head />
</head>
<body>
<s:form method="POST" action="register" >
  </tr>
  <tr>
    <td colspan="2">
      <s:actionerror/>
      <s:fielderror/>
    </td>
  </tr>
  <s:textfield label="UserID"     key="userId" maxLength="20"/>
  <s:password label="Password"    key="password" maxLength="20"/>
  <s:password label="retype-Password"  key="retypepassword" maxLength="20"/>
  <s:textfield label="Firstname"  key="firstName" maxLength="20"/>
  <s:textfield label="Lastname"   key="lastName" maxLength="20"/>
  <s:textfield label="SecurityLevel" key="securityLevel" maxLength="20"/>
  <s:submit   value="Register"/>
</s:form>
</body>
</html>

Upvotes: 2

Views: 2912

Answers (2)

Jaiwo99
Jaiwo99

Reputation: 10017

try this:

1.define your own exception class

public class MyException extends Exception {}

2.throw this exception, if there is an exception in your insert method

if(insertError){
    throw new MyExecption("your message");
}

3.in the action class, invoke insert method with try-catch block

try{
    insert();
} catch(MyException me){
    addActionError(me.getMessage());
    return "anything_you_want";
}

4.you can show the message in the jsp using <s:actionerror/>

Upvotes: 0

Roman C
Roman C

Reputation: 1

There are addActionError and addFieldError methods at the ActionSupport. You can catch any errors inside the validate method. And invoke these methods if the wrong data is submitted. Once applied the request will dispatch to the input result. In the JSP you can use <s:actionerror and <s:fielderror to display errors you've added by the methods above.

Upvotes: 1

Related Questions