oraclejava8 2010-06-01 21:38
浏览 313
已采纳

struts2的action类中,字段的属性对应页面表单字段的属性,这个是怎么实现的呢?

struts2的action类中,字段的属性对应页面表单字段的属性,这个是怎么实现的呢?

  • 写回答

5条回答 默认 最新

  • myali88 2010-06-02 10:01
    关注

    是通过拦截器把Action的属性值设置进去的。在“defaultStack”interceptor-stack中有个“param”拦截器:com.opensymphony.xwork2.interceptor.ParametersInterceptor,在这个拦截器的方法:
    [code="java"]
    public String doIntercept(ActionInvocation invocation) throws Exception {
    Object action = invocation.getAction();
    if (!(action instanceof NoParameters)) {
    ActionContext ac = invocation.getInvocationContext();
    final Map parameters = retrieveParameters(ac);

            if (LOG.isDebugEnabled()) {
                LOG.debug("Setting params " + getParameterLogMap(parameters));
            }
    
            if (parameters != null) {
                Map<String, Object> contextMap = ac.getContextMap();
                try {
                    ReflectionContextState.setCreatingNullObjects(contextMap, true);
                    ReflectionContextState.setDenyMethodExecution(contextMap, true);
                    ReflectionContextState.setReportingConversionErrors(contextMap, true);
    
                    ValueStack stack = ac.getValueStack();
                    setParameters(action, stack, parameters);
                } finally {
                    ReflectionContextState.setCreatingNullObjects(contextMap, false);
                    ReflectionContextState.setDenyMethodExecution(contextMap, false);
                    ReflectionContextState.setReportingConversionErrors(contextMap, false);
                }
            }
        }
        return invocation.invoke();
    }
    

    [/code]
    在setParameters方法里有具体设置属性的操作,你可以看到这么一段:
    [code="java"]
    ...
    try {
    newStack.setValue(name, value);
    } catch (RuntimeException e) {
    ...
    }
    ...
    [/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥20 测距传感器数据手册i2c