`
yourenyouyu2008
  • 浏览: 287707 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

seam中方便地使用el表达式 el的高级用法

阅读更多

1)直接由表达式字符串生成javax.el.ValueExpression和javax.el.MethodExpression,主要适用于动态构造jsf组件

org.jboss.seam.core.Expressions

@Name("org.jboss.seam.core.expressions")

 

 

Expressions.instance().createValueExpression("#{var11.address}").toUnifiedValueExpression()

Expressions.instance().createMethodExpression("#{var11.f1()}").toUnifiedMethodExpression()

主要适用于动态构造jsf组件,给组件属性设置表达式。

javax.faces.component.html.HtmlOutputText out2=new javax.faces.component.html.HtmlOutputText();
      out2.setValueExpression("value", Expressions.instance().createValueExpression("#{var11.city}").toUnifiedValueExpression());
2)在seam组件中直接执行el表达式,就像在页面组件中一样。

Expressions.instance().createMethodExpression("#{search.refresh()}").invoke();
List newList=(List)Expressions.instance().createValueExpression(("#{search.resultList}").getValue();

3)将java对象转成表达式,使得java对象可以直接在表达式中使用,比如seam扩展的jpa查询语句中可以插入表达式,针对in or需要list的查询语句特别有意义。当in list时不需要把list中的内容转换成字符串

h.xzqh in (#{list})这样就可以了,我们需要的就是将list对象转成表达式即可

 

Expressions.instance().createValueExpression(("#{list}").setValue(list);

em.createQuery(".....where ....h.xzqh in (#{list})").getResultList();

当然,这个更好的方式就是使用jpa的参数 in(:list).

4)如何让不能执行的表达式执行

<rich:column filterBy="#{item.seri.desc}" 获取filter字段的class,在表头上#{item.seri.desc}是无法执行的,因为没有item对象存在,只有当进入table循环后item才有值。

。。。。。。。。

5)seam集成的hibernate验证,构造自己的el Resolver

详见seam ui源码Validators class

 

public ErrorMessage[] validate(ValueExpression valueExpression,
   ELContext elContext, Object value, ValidatorObject... others) {
  ValidatingResolver validatingResolver = new ValidatingResolver(
    elContext.getELResolver());
  ELContext decoratedContext = EL.createELContext(elContext, validatingResolver);

 

  //el的解析就使用validatingResolver来解析了。
  //[不去真正执行对象的set方法]   valueExpression.setValue方法中
  //拿value去调用hibernate的验证
  valueExpression.setValue(decoratedContext, value);
  return validatingResolver.getMessages();
 }

 

class ValidatingResolver extends ELResolver {
  private ELResolver delegate;

@Override
      public void setValue(ELContext context, Object base, Object property, Object value) throws NullPointerException, PropertyNotFoundException, PropertyNotWritableException, ELException
      {
         if (base != null && property != null)
         {
            context.setPropertyResolved(true);
            invalidValues = getValidator(base).getPotentialInvalidValues(property.toString(), value);
         }

      }

新思路:执行hibernate的关键是知道是那个实体,取表达式字符串,构造出实体表达式,执行表达式即可获得实体。

#{apply.aa}变成#{apply},执行#{apply}即可获得实体。

1
1
分享到:
评论

相关推荐

    seam的注解和标签

    在实际开发中,Seam注解和标签的结合使用可以极大地简化代码,提高开发效率。例如,通过`@Name`和`@In`注解,可以轻松地管理依赖关系;利用`@Entity`和`@Table`注解,可以方便地实现数据持久化;而`&lt;s:form&gt;`和`s:...

    Seam框架文档简述

    Seam提供了对标准EL(Expression Language)的扩展,称为JBoss EL。这种扩展允许在表达式中直接传递参数,从而增强了表达式的功能。 ##### 8. 现有Java EE规范和标准的补充 Seam不仅仅是一个框架,它还致力于推动...

    seam+hibernate注册例子

    - 在JSP中使用Seam的EL表达式(例如#{userBean.register})来调用注册方法。 5. **编写注册逻辑** - 创建一个Seam组件,例如`UserBean`,使用@SessionScoped和@Name注解,以处理用户的注册信息。 - 在`UserBean`...

    Seam_2.0_Reference_zh_CN

    它扩展了JSF,允许开发者使用EL表达式在后台数据和用户界面之间直接交互,同时支持AJAX功能,增强用户体验。 4. **EJB集成**:Seam简化了EJB的使用,通过自动的上下文管理和依赖注入,使得EJB的使用变得更加直观。...

    seam介绍

    Seam不仅仅是一个集成框架,它还提供了自己的状态管理机制,通过注解和EL表达式实现与其他框架的深度整合。Seam对ORM(对象关系映射)的支持尤为突出,尤其是在处理持久化上下文的生命周期中,避免了ORM常见的问题,...

    Seam security

    - 声明认证方法:定义一个方法,该方法验证用户凭证是否有效,并通过表达式语言(EL)进行访问。 - 创建JSF登录表单:创建一个标准的JavaServer Faces (JSF)登录表单,并将用户凭证绑定到输入字段。 - 编写认证方法...

    seam级联菜单例子

    在Seam中,我们可以利用EL(Expression Language)表达式将Java后台的数据绑定到JSF视图。例如,`&lt;f:selectItems value="#{countryManager.countries}" /&gt;`将后台的国家列表渲染为菜单选项。当用户在菜单中选择一个...

    深入浅出JBoss Seam

    Seam不仅仅是一个集成框架,它拥有自己的状态管理机制,允许框架之间通过注解和EL表达式实现深度整合。Seam的开发者对第三方框架有着深刻的理解,因此能够更好地将它们融合在一起,而不仅仅是简单的拼接。例如,Seam...

    Seam 2.1 安全模块框架

    如果需要自定义验证逻辑,可以在 `components.xml` 文件中创建一个名为 `identity` 的组件,并指定 `authenticate-method` 为自定义验证方法的 EL 表达式,如 `#{authenticator.authenticate}`。 **编写验证方法**...

    NetBeans下jboss seam开发入门

    Seam的EL表达式可以方便地与后台组件进行交互。 6. **数据持久化与JPA**: Seam与JPA的集成使得数据库操作变得简单。在`persistence.xml`中配置数据源和实体类,然后在Seam组件中通过`@In`注解注入EntityManager,...

    图书:JSF2 API和JBoss Seam入门

    6. ** Managed Beans**:JSF中的业务逻辑通常封装在Managed Beans中,可以通过EL表达式直接调用。 JBoss Seam框架提供了以下优势: 1. **更简单的编程模型**:Seam通过自动管理依赖注入(DI)和组件生命周期,使得...

    seam node

    此时,Seam框架会通过EL表达式解析这个标识符,并调用相应Home类中的`setId()`方法。一旦设置了ID,`getDefinedInstance()`就会尝试从数据库中获取对应实体并返回。 - 在实践中,`getDefinedInstance()`返回非空...

    seam in action

    - **统一表达式语言(EL)**:通过使用统一的表达式语言(EL),Seam使得JSF和其他技术之间的通信变得更加简单。 **2. 使用seam-gen进行工作** Seam还提供了一个名为seam-gen的工具,该工具可以帮助开发者快速生成初始...

    JBoss Seam3

    - **统一EL**:Seam3提供了一种统一的方式来评估表达式语言。 ##### 5.4 资源加载 - **资源加载器扩展**:通过扩展资源加载器接口,可以自定义资源加载的行为。 ##### 5.5 日志记录重新设计 - **JBoss Logging基础...

    Seam 例子 Hello World

    这些页面通常使用EL表达式与后端组件进行交互。 #### 七、事件处理器 事件处理器是处理用户提交的表单数据的地方。在这个例子中,我们创建一个简单的POJO来处理用户提交的名字,并将其保存到数据库中。 ```java @...

    jboss-seam 注解

    通过这个名称,开发人员可以在其他地方引用此组件,例如在JSF页面或EL表达式中。此外,该注解还可以用于方法级别,用于定义局部组件。 #### @Scope `@Scope`注解用于定义组件的作用域,默认情况下,组件的作用域是...

    seam in action中文第一章

    5. **统一表达式语言**:Seam扩展了JSF生命周期,通过统一表达式语言(EL)促进了不同技术间的通信,增强了开发者体验。 在第一章中,作者探讨了Seam如何解决Java开发者面临的挑战,比如JSF的复杂性、EJB的历史问题...

    使用JBoss Studio開發Seam框架專案(圖式教學)

    在项目中新建一个JSF页面(.xhtml),使用JSF标签和EL表达式来定义UI元素。 2. **定义Seam组件**: Seam组件是应用程序的核心,可以通过XML配置文件(components.xml)或使用注解(@Name)来创建。组件可以是简单的...

    深入浅出-jbossseam说明

    5. **安全和身份验证**:Seam提供了内置的身份验证和授权机制,可以方便地与JAAS(Java Authentication and Authorization Service)配合使用,为应用程序提供安全防护。 6. **国际化和本地化**:Seam支持多语言...

    Beginning JSF2 APIs and JBoss Seam

    - **EL表达式**:熟悉JSF中的表达式语言,能够更高效地进行数据绑定和条件渲染。 - **AJAX支持**:掌握如何利用JSF的内置AJAX支持来创建动态和交互式的用户界面。 #### 三、JBoss Seam **1. 概述** - **定义**:...

Global site tag (gtag.js) - Google Analytics