0

I have developed a jsp page where user details needed to be given. Here is the jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Register</title>
<link rel="stylesheet" type="text/css" href="styles.css" />
</head>

<body>       
<div id="form_container" align="center">

        <div class="errorMessages" >
            <s:actionerror/>
        </div>


    <s:if test="hasActionMessages()" >                      <!--  Print action messages if any -->
        <div class="successMessages" >
            <s:actionmessage/>
        </div>
    </s:if>

    <s:form action="registerOphthalmologist" method="post">  

        <s:hidden       key="role"          label="role"    value="O"       />
        <s:textfield    key="username"      label="Choose UserName" required="true"/>
        <s:password     key="password"      label="Choose Password" required="true"/>

        <s:textfield    key="givenName"     label="Name"    required="true"/>
        <s:textfield    key="surname"       label="Surname" required="true"/>
        <s:textfield    key="age"           label="Age"     required="true"     value=""/>
        <s:select       key="gender"        label="Gender"  
                        list="#{'M':'Male','F':'Female'}" 
                        required="true"/>

        <s:textfield    key="contactNumber"     name="contactNumber"    label="Contact Number"  required="true"/>
        <s:textfield    key="email"             name="email"            label="email"           required="true"/>
        <s:textfield    key="city"              name="city"             label="City"            required="true"/>
        <s:textfield    key="district"          name="district"         label="District"        required="true"/>
        <s:textfield    key="state"             name="state"            label="State"           required="true"/>
        <s:textfield    key="country"           name="country"          label="country"         required="true"/>
        <s:textfield    key="postalCode"        name="postalCode"       label="Postal Code"     required="true"/>

        <s:textfield    key="degree"            label="Qualification"           required="true"/>
        <s:textfield    key="university"        label="University"              required="true"     value=""/>
        <s:textfield    key="hospitalName"      label="Hospital Name"           required="true"/>
        <s:textfield    key="experience"        label="Years of Experience"     required="true"     value=""/>

        <s:checkbox     key="checkMe"       fieldValue="true"       label="Agree to terms & Conditions"/>
        <s:submit       value="Register"    align="center"/>

    </s:form>
</div>  
<div class="footer">
    <p align="center">Designed and maintained by SSSIHL</p>
</div>  

This goes to the following action file.

package com.ActionClasses;

import com.Daos.RegisterDao;
import com.Daos.UsernameAvailabilty;
import com.Beans.RegisterBeans;
import com.mysql.jdbc.StringUtils;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

@SuppressWarnings("serial")
public class RegisterAction extends ActionSupport implements Action,ModelDriven<RegisterBeans>
{

RegisterBeans registerBeans = new RegisterBeans();  

public void validate(){
    System.out.println("came here "+ registerBeans.getUsername());
     if (StringUtils.isNullOrEmpty(registerBeans.getUsername()))
       {
         System.out.println("username not found "+ registerBeans.getUsername());
          addFieldError("username","Username is required");
          return;
       }
    /*boolean Available = UsernameAvailabilty.check(registerBeans.getUsername());

    if(!Available){
        System.out.println("username not available "+ registerBeans.getUsername());
        addFieldError("username","Username is not available");
        return;
    }
*/
}
public String execute() throws Exception{

    if(RegisterDao.save(registerBeans) == 4) /*For every registration 4 tables will be filled in database*/
        return SUCCESS;

   return ERROR;
}
@Override
public RegisterBeans getModel() {
    return registerBeans;
}

}

RegisterBeans.java contains all getters and setters. When I don't give any username in jsp, I am able to see the message "came here " in console. But when control comes back to register.jsp, the error message is not being displayed on the screen. What is the mistake I did.

My struts.xml code for this is

<action name="register*" class="com.ActionClasses.RegisterAction">
        <result name="success"> /login.jsp              </result>
        <result name="input">   /register{1}.jsp        </result>
    </action> 
Pawan
  • 423
  • 6
  • 28
  • You are setting error message in FieldError and displaying using ActionError. Change it . or set your error in addActionError message. – Naveen Kumar Aug 28 '14 at 08:41
  • i tried it initially As that is not helping me I changed it to field error. Even this is not working. – Pawan Aug 28 '14 at 08:52
  • 1
    Stop using modeldriven, and everything should be fine. – Aleksandr M Aug 28 '14 at 08:54
  • You are using RegisterBeans Pojo class for getter and setter so Username field will not be direclty available on Jsp. Try with putting all getter and setter in action and then check field error is displaying or not? Then we need to get that filed from RegisterBeans .username. – Naveen Kumar Aug 28 '14 at 09:10
  • 1
    @AleksandrM another victim of MD, probably – Andrea Ligios Aug 28 '14 at 09:27
  • @AndreaLigios You are probably *don't* know a correct answer. Surprising nobody care about it. – Roman C Sep 03 '14 at 10:46

1 Answers1

0

IF you are using simple Theme, the Field Errors won't be rendered automatically.

You need to do it by yourself:

<s:textfield  key="username"  label="Choose UserName" required="true"/>
<s:fielderror fieldName="username" />

Also note that required="true" should be required="required" if you are using a recent version of Struts2.

Andrea Ligios
  • 49,480
  • 26
  • 114
  • 243
  • If I do that I am getting an error that "Undefined attribute name fieldName". And required="true" is not giving me any error or warning. I am using struts2.3.16.3 – Pawan Aug 28 '14 at 08:49
  • 1) Not possible, you have some typo or are doing something not written here (it works, and it is on [docs too](http://struts.apache.org/release/2.3.x/docs/fielderror.html); 2) required is the HTML5 required, and should be required="required". In old struts2 versions, required was a struts2 attribute, and it was required="true". Now it is requiredLabel. – Andrea Ligios Aug 28 '14 at 09:06
  • I pasted complete jsp and action files – Pawan Aug 28 '14 at 09:15
  • Are you using simple theme ? Can you see the "username not found" print in console ? – Andrea Ligios Aug 28 '14 at 09:26
  • Then retry using ``, paying attention to the typos. fieldName, s:fielderror (and not other tags like for example s:actionerror), etc. The error must be something trivial. – Andrea Ligios Aug 28 '14 at 10:26