1

I have a managed bean that returns a number of different properties that describe an application. So it can be called to return the FilePath of a database by calling

appProps[sessionScope.ssApplication].helpFilePath

or

appProps[sessionScope.ssApplication].ruleFilePath

I'm trying to work out a generalized case where I need to call for the file path based on a value in a compositeData variable which can take on any one of 4 different values help/rule/app/main.

I wrote this SSJS and it works but I am wondering if there is a better way to make it work:

var target:String = compositeData.DBSource;
switch (target){
    case "app" :
        return appProps[sessionScope.ssApplication].appFilePath;
        break;
    case "help" :
        return appProps[sessionScope.ssApplication].helpFilePath;
        break;
    case "rule" :
        return appProps[sessionScope.ssApplication].ruleFilePath;
        break;
    case "main" :
        return appProps[sessionScope.ssApplication].mainFilePath;
        break;

}

I can't figure out if there is a way to compute the method by using compositeData.DBSource + "FilePath" . when I try this I get an error that the method does not exist. Using the SSJS code above is not really a problem but it just seems a bit redundant.

Bill F
  • 2,057
  • 3
  • 18
  • 39

1 Answers1

2

You can make a new method in your managed bean that takes target as an argument:

public String getFilePath(String target) {
    String returnValue = "";
    if (target.equalsIgnoreCase("app")) {
        returnValue = this.appFilePath;
    } else if (target.equalsIgnoreCase("help")) {
        returnValue = this.helpFilePath;
    } else if (target.equalsIgnoreCase("rule")) {
        returnValue = this.ruleFilePath;
    } else if (target.equalsIgnoreCase("main")) {
        returnValue = this.mainFilePath;
    }

    return returnValue;
}

And then call it like this in your SSJS:

appProps[sessionScope.ssApplication].getFilePath(compositeData.DBSource);
Per Henrik Lausten
  • 21,331
  • 3
  • 29
  • 76