`

浅谈Action条件化Enable设置的机制

阅读更多

前面有片entry写了如何动态设置Action的Enable性,使用了plugin.xml中的enableFor机制,虽然达到了效果,但是没说清楚具体的机制,今天在这里简单说一下我的理解。

如果我们的Action是继承自org.eclipse.ui.actions.ActionDelegate这个类,我们可以发现它有一个方法叫做selectionChanged,其完整的接口如下:

<!---->1 public void selectionChanged(IAction action, ISelection selection)

让我们看一看它的java doc是怎么说的:
Notifies this action delegate that the selection in the workbench has changed.
Implementers can use this opportunity to change the availability of the action or to modify other presentation properties.
When the selection changes, the action enablement state is updated based on the criteria specified in the plugin.xml file. Then the delegate is notified of the selection change regardless of whether the enablement criteria in the plugin.xml file is met.
param action the action proxy that handles presentation portion of the action
param selection the current selection, or null if there is no selection.

好,很清楚的看到,这里是改变Action的Enable性的地方,当我们复写了这个方法之后,eclipse会调用它来判断是否Enable这个Action,即它是一个Callback。

从参数来看,action就应该是我们想要用的那个Action;那么selection是什么呢?我试验了一下,当在TextEditor中选择content的时候,这个selection是一个TextSelection。由此可以推断出,selection应该是我们在eclipse上面的各种操作的一个抽象,即每次我们做了不同的操作,这个selectionChanged都会被调用。

这样看来,我只要在selectionChanged中把selection转型成TextSelection然后获得其Text,判断这个Text是否为空并使用action的setEnable方法就可以达到我的目的了。但是,实际运行的结果是,当我不先选择实现这个selectionChanged的Action,这个函数是不会被调用的。也就是说,对Action的Enable性的设置在最开始是无效的,只有先选择了这个Action后才有效。

这样显然不行,于是还得使用enableFor这个办法。我想,也许enableFor也是使用的selectionChanged这个机制,但是会在初始化Action的时候就调用它,这样就会达到理想的结果了。

分享到:
评论

相关推荐

    浅谈vuex为什么不建议在action中修改state

    - 当启用 strict 模式时,Vuex 会在 store 初始化时设置监听器,监控 state 的变化。当 state 变化且 `_committing` 为 false 时,系统会抛出错误,提醒开发者不要在 mutation 之外修改 state。 综上所述,不在 ...

    浅谈SSH学习要点

    此外,Struts的验证框架、分发Action、Template模式和Proxy模式以及国际化和异常处理都是提升开发效率和应用质量的关键。 接下来是Hibernate,它是一个对象关系映射(ORM)框架。基础使用包括理解ORM的概念,如何...

    浅谈Struts框架技术.

    3. 应用资源文件:可选的本地化和国际化设置。 Struts通过这些组件和配置文件,构建了一个高效、灵活的开发环境,使得开发者可以更加专注于业务逻辑,而非底层的HTTP请求处理和页面跳转逻辑。此外,Struts还提供了...

    Spring In Action-3.2@Conditional条件化Bean

    Spring In Action-3.2@Conditional条件化Bean,Spring In Action-3.2@Conditional条件化Bean,Spring In Action-3.2@Conditional条件化Bean

    浅谈Action+Service +Dao 功能

    浅谈Action+Service+Dao功能 1. Action、Service、DAO简介 Action是管理业务调度和管理跳转的,Service是管理具体的功能的,DAO只完成增删改查。总结这三者,Action像是服务员,Service是厨师,DAO是厨房的小工。...

    Windchill9.0 action与actionModel

    1. **可配置性**:Action可以根据业务需求进行定制,比如设置不同的执行者、触发条件和执行顺序。 2. **可复用性**:一个Action可以在多个工作流程中重复使用,提高了代码的重用性和效率。 3. **灵活性**:Action...

    浅谈Strut2如何对请求参数的封装

    其中,params拦截器负责从请求中提取参数并将其设置到ValueStack中对应的属性上。此外,还有staticParams拦截器,它用来处理Action配置文件中的静态参数。 在拦截器链中,每个拦截器都有机会修改ValueStack中的属性...

    提升网页游戏性能浅谈——缓冲池

    ### 提升网页游戏性能浅谈——缓冲池 在网页游戏开发的过程中,特别是在使用Actionscript 3.0开发MMORPG类网页游戏时,游戏性能往往成为开发者关注的重点。随着技术的发展,网页游戏不仅要求具备良好的视觉效果,还...

    浅谈Struts2拦截器的原理与实现.docx

    在Struts2中,拦截器可以理解为一种动态AOP(面向切面编程)机制,它们按照预定义的顺序在Action调用前后执行,提供了诸如日志记录、事务管理、权限检查等通用功能。 配置Struts2拦截器主要通过XML配置文件完成,如...

    浅谈基于Struts和Hibernate的J2EE应用

    它支持多种数据库,如MySQL、Oracle等,且具备事务管理、缓存机制和查询语言HQL等特性。 **Struts与Hibernate的结合** 在J2EE应用中,Struts处理控制逻辑,而Hibernate负责数据持久化。将两者结合,可以在Struts的...

    浅谈redux以及react-redux简单实现

    Redux 是一个专门为 JavaScript 应用程序设计的状态容器,它提供了可预测化的状态管理。随着单页应用(SPA)的发展,管理复杂的状态变得越来越困难。Redux 通过集中存储和管理所有应用状态来解决这一问题,使得状态...

    浅谈vuex之mutation和action的基本使用

    浅谈Vuex之mutation和action的基本使用 在Vuex中,mutation和action是两个核心概念,它们之间存在紧密的联系。mutation是改变state的唯一方式,而action则是将mutation commit到store中。 首先, lets talk about ...

    关于struts2中Action名字的大小写问题浅谈

    Struts2 中 Action 名字的大小写问题浅谈 Struts2 框架中 Action 的命名规则是开发者需要注意的问题之一。在日常开发中,开发者可能会遇到各种错误,例如在使用 Struts2 框架编写 Action 类以及在 jsp 中写调用相关...

    Android Activity设置相同的action进行判断源码.rar

    这份名为"Android Activity设置相同的action进行判断源码.rar"的压缩包文件包含了关于如何在Android中处理这种情况的源码示例。 首先,让我们理解Intent的action。Intent是用来在Android组件之间传递消息的对象,它...

    工作流引擎 Osworkflow 及其持久化机制的研究

    ### 工作流引擎 Osworkflow 及其持久化机制的研究 #### 1. 引言 随着企业信息化的发展,工作流技术作为一种重要的自动化工具,在提高工作效率、优化业务流程方面发挥着重要作用。工作流引擎作为工作流系统的核心...

    jsp自动调用action

    ### jsp自动调用action详解 #### 一、概述 在Web开发中,尤其是在使用Java Server Pages (JSP)与Struts框架时,有时需要在用户访问某个初始页面(如欢迎页)时自动触发一系列后端操作(如执行某个Action)。这种...

    java的映射机制

    - **提高代码的可维护性和可扩展性**:通过映射机制,开发者可以避免在代码中硬编码大量的条件语句(如if-else或switch-case),使得代码更加简洁、清晰,也更容易维护和扩展。 - **增强框架的灵活性**:映射机制...

    struts2 对action中的所有方法进行校验

    Struts2通过Action类的校验机制,帮助开发者实现这一目标。下面我们将深入探讨Struts2如何对Action中的所有方法进行校验。 首先,Struts2的校验机制基于两个主要组件:Validator和ValidationInterceptor。Validator...

Global site tag (gtag.js) - Google Analytics