Struts <logic:messagesPresent> and <logic:messagesNotPresent> Tag

The <logic:messagesPresent> tag generates the nested body content if the specified message is present in the request. Whereas <logic:messagesNotPresent> tag generates the nested body content if the specified message is not present in the request. In order to use the Struts HTML Tags you need to include the following taglib directive in the jsp page.

<%@taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> 

First create a new Dynamic Web Project and configure it as Maven Project. For Reference, Click Here

Add the following dependencies in pom.xml

<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.8.2</version>
      <scope>test</scope>
    </dependency>
  
    <dependency>
      <groupId>org.apache.struts</groupId>
      <artifactId>struts-core</artifactId>
      <version>1.3.10</version>
    </dependency>
  
    <dependency>
      <groupId>org.apache.struts</groupId>
      <artifactId>struts-taglib</artifactId>
      <version>1.3.10</version>
    </dependency>
  
</dependencies>

1. Action Form

Create a Action Form class and name it EmployeeForm.java that contains the following code.

package com.kruders.form;
 
import javax.servlet.http.HttpServletRequest;
 
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
 
public class EmployeeForm extends ActionForm{
    private static final long serialVersionUID = 1L;
        
    public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
        ActionErrors errors = new ActionErrors();
        errors.add("error.userName.required", new ActionMessage("error.userName.required"));
        return errors;
    }
}

2. Action Class (Controller)

Let us create an Action class that will handle the request. Here Action Class contains the business logic.

EmployeeAction.java

package com.kruders.action;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import org.apache.struts.Globals;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import org.apache.struts.action.DynaActionForm;
 
public class EmployeeAction extends Action{
    public ActionForward execute(ActionMapping mapping,ActionForm form,
        HttpServletRequest request, HttpServletResponse response)
                throws Exception {
        ActionMessages messages = new ActionMessages();
        messages.add(Globals.MESSAGE_KEY, 
               new ActionMessage("global.message.loginSuccess"));
        saveMessages(request,messages);
        return mapping.findForward("success");
    }
}

3. Properties File

Create ApplicationResources.properties and write the following text.

error.userName.required = User name is required.
error.password.required = Password is required.
global.message.loginSuccess = Login Successfully

4. View

Create welcome.jsp and write the following code.

<%@taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%>
<logic:forward name="checkMessagesPresent" />

Now create another jsp file checkMessagesPresent.jsp that contains the struts logic tag to check the given message is present int the request.

<%@taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<%@taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%>
<%@taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<html>
<head>
<title>Struts Logic messagesPresent Tag <logic:messagesPresent> and messagesNotPresent Tag <logic:messagesNotPresent></title>
</head>
<body>
Are there any errors on this page? - 
<logic:messagesPresent>
Yes
</logic:messagesPresent>
<logic:messagesNotPresent>
No
</logic:messagesNotPresent>
 
<br/><br/>
Does error messages contains <b>error.password.required</b>? -
<logic:messagesPresent property="error.password.required">
Yes
</logic:messagesPresent>
<logic:messagesNotPresent property="error.password.required">
No
</logic:messagesNotPresent>
  
<br/><br/>
Are there any error messages under the key <b>Globals.MESSAGE_KEY</b>? -
<logic:messagesPresent message="global.message.loginSuccess">
Yes
</logic:messagesPresent>
<logic:messagesNotPresent message="global.message.loginSuccess">
No
</logic:messagesNotPresent>
  
<br/><br/>
 
</body>
</html>

5. Struts Config

Add the following code in struts-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC 
"-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" 
"http://jakarta.apache.org/struts/dtds/struts-config_1_3.dtd">
  
<struts-config>
     <form-beans>
        <form-bean name="EmployeeForm" type="com.kruders.form.EmployeeForm"/>
    </form-beans>
    <global-forwards>
        <forward name="checkMessagesPresent" path="/checkMessagesPresent.do"/>
    </global-forwards>
       
    <action-mappings>
        <action input="/checkMessagesPresent.jsp" name="EmployeeForm" path="/checkMessagesPresent"  validate="true" scope="request" type="com.kruders.action.EmployeeAction">
            <forward name="success" path="/checkMessagesPresent.jsp" />
        </action>
    </action-mappings>
</struts-config>

6. Deployment Descriptor

Now configure the deployment descriptor. Here, we have asked the container to give our ActionServlet any request that matches the pattern *.do

Add the following configuration information in the web.xml file

<welcome-file-list>
    <welcome-file>welcome.jsp</welcome-file>
</welcome-file-list>
 
<servlet>
    <servlet-class>
        org.apache.struts.action.ActionServlet
    </servlet-class>
    <init-param>
        <param-name>config</param-name>
        <param-value>/WEB-INF/struts-config.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
  
<servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

7. Run Project

Now when you run the project, following screen will be displayed as in Figure 37.1

Figure 37.1 Figure 37.1

The folder structure of the example is shown below in Figure 37.2

Figure 37.2 Figure 37.2

You can download the source code of this example here.

,

No comments yet.

Leave a Reply