2

We are using struts 2.3.xx after upgrade to struts 2.5.12 we found that the ParameterAware is deprecated and we must use HttpParametersAware.

Problem

There is an action class which extends ParameterAware and change some parameters before action (It remove input masks for example removes , from 123,456,789) :

public class Sample extends ActionSupport implements
        ModelDriven<SampleVO>,ParameterAware {


    @Override
    public void setParameters(Map<String, String[]> parameters) {
        for (String[] values : parameters.values()) {
            for (int i = 0; i < values.length; i++) {
                values[i] = Mask.removeMask(values[i]);
            }
        }
    }

}

We tried to do this with new HttpParametersAware and some thing like:

 for (Entry<String, Parameter> entry : parameters.entrySet()) {
             String key = entry.getKey();                
             Parameter newParam =  new Parameter.Request( key, entry.getValue().getValue().replaceAll(",", ""));

}

But I face the error

HttpParameters are immutable, you cannot put value directly! 

Can we change parameters like we used to do it in struts 2.3.x. how ?! If not any alternative?

Alireza Fattahi
  • 42,517
  • 14
  • 123
  • 173

1 Answers1

0

This can be done as

public void setParameters(HttpParameters parameters) {
         Map<String, Parameter> newParams = new HashMap<String,Parameter>();
         for(String key :parameters.keySet()){
             Parameter p = parameters.get(key);
             if(p instanceof Parameter.Request){
                 newParams.put(key, new Parameter.Request(key, new String[] {"new"+p.getValue()}));
             }
         }
         parameters.appendAll(newParams);
     }

complete credits to @YasserZamani

Please see https://lists.apache.org/list.html?user@struts.apache.org

Alireza Fattahi
  • 42,517
  • 14
  • 123
  • 173