Question

Say I have a struts.properties file with a defined value uploads.directory . How can I access that value from an Actioncontext programatically?

Was it helpful?

Solution

You can use getText("some.property.name") which return you the property value

http://struts.apache.org/maven/struts2-core/apidocs/com/opensymphony/xwork2/ActionSupport.html

OTHER TIPS

Create ActionSupport Object and by using getText() method of ActionSupport class.

ActionSupport actionSupport = new ActionSupport();
actionSupport.getText("foo.bar");

Create a resources folder under src. In the struts.xml file add a constant e.g., <constant name="struts.custom.i18n.resources" value="global"></constant> Here global is the name of properties file. Now you will be able to use the properties in the entire application.

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
    <!-- constant to define result path locations to project root directory -->

    <!-- constant to define global resource bundle -->
    <constant name="struts.custom.i18n.resources" value="global"></constant>

    <package name="user" namespace="/" extends="struts-default">
        <action name="home">
            <result>/home.jsp</result>
        </action>
        <action name="welcome" class="com.waqar.struts2.actions.WelcomeAction">
            <result name="success">/welcome.jsp</result>
        </action>
    </package>

</struts>

The welcome.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib uri="/struts-tags" prefix="s" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title><s:property value="getText('action.welcome.title')"/></title>
    </head>
    <body>
             <s:property value="getText('action.welcome.username')"/>: <s:property value="username"/><br>
    </body>
    </html>

global.properties

action.welcome.username=waqar

In action class

System.out.println(getText("action.welcome.username"));

You need to put the my.properties file or my_locale.propeties file in the package that houses your action class.

You need to put the values in properties files other than struts.properties for examples ApplicationResources.properties or my.properties which needs to be in the classpath. struts.properties file is used to load struts specific properties for example struts.i18n.encoding=UTF-8 or struts.devMode = false etc.

The thing you need to do in struts.properties after you create the properties file for your customized messages is you have to add the following property in struts.properties file

struts.custom.i18n.resources=ApplicationResources

If you have more than one custom message property files then you need to add them by separating with comma for example:

struts.custom.i18n.resources=ApplicationResources,my

Then in your action classes you can access the property values by using getText('propertyName')

you can get value from message resource file like this:

public class MyAction extends ActionSupport {

   public String getUserDetails() {
      if("First Name".equals(getText("label.firstName"))) {
          System.out.println("In if block");
      }
   }
}

you can also get more information, how to get values from .properties files in java class or jsp files. for JSP:

<s:text name="label.firstName" />

and

<s:property value="getText('label.age')" />

for more information you can go through this link: get info here

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top