代码之家  ›  专栏  ›  技术社区  ›  Alireza Fattahi

Struts 2.5 Parameterware和HttpParametersAware

  •  2
  • Alireza Fattahi  · 技术社区  · 7 年前

    ParameterAware 已弃用,我们必须使用 HttpParametersAware .

    问题

    有一个action类扩展了 操作前的一些参数(例如删除输入掩码) , 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]);
                }
            }
        }
    
    }
    

    我们试着用新的 比如:

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

    但我面临着错误

    HttpParameters are immutable, you cannot put value directly! 
    

    我们可以像在struts 2.3中那样更改参数吗。x、 怎么会?!如果没有其他选择?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Alireza Fattahi    7 年前

    这可以通过以下方式实现:

    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);
         }
    

    请看 https://lists.apache.org/list.html?user@struts.apache.org