当前位置: 首页 > 知识库问答 >
问题:

JSF中的Scala集合

杜凯
2023-03-14

为了学习,我开发了一个Scala和JSF应用程序。在这个应用程序中,在JSF中呈现之前,我必须将所有Scala集合对象转换为Java cllectios。有没有什么简单的方法可以通过ScalaElResolver这样的东西来实现,如果有,任何人都有ScalaElResolver的示例代码。提前谢谢菲利普

共有2个答案

皇甫浩壤
2023-03-14

嗨,我刚刚在github上打开了一个scalaelresolver项目,https://github.com/werpu/scalaelresolver解析程序除了解析scala属性外,还进行集合转换。其中包括一个例子。

锺离正祥
2023-03-14

此代码基于Werner Punz的ScalaElResolver。我已经把它精简了,所以它只处理从ScalaIterablejava的转换。lang.Iterable

class SimpleScalaElResolver extends ELResolver {
  override def getValue(elContext: ELContext, base: AnyRef, 
                        prop: AnyRef): AnyRef = {
    println(s"SimpleElResolver: getValue: Entering: $base.$prop")
    if (base == null) {
      null
    } else {
      val method = base.getClass.getDeclaredMethod(prop.toString)
      if (method != null) {
        val res = method.invoke(base)
        if (res.isInstanceOf[Iterable[_]]) {
          val iter = res.asInstanceOf[Iterable[_]]
          println("getValue: Wrapping as Java iterable")
          elContext.setPropertyResolved(true)
          JavaConversions.asJavaIterable(iter)
        } else {
          null
        }
      } else {
        null
      }
    }
  }

使用sbt及其web插件(在引擎盖下使用jetty),即使所有其他方法“尚未实现”,也足以让它运行,如:

override def getCommonPropertyType(elContext: ELContext, o: AnyRef): Class[_] = {
  ???
}

在我的例子中,没有调用其他方法。

我只在. jspx测试过它;据我所知,这也应该适用于JSF

例如:如果你有一个类

class Model(val list: List[Int])

在你的控制器里

val model = new Model(List(1))

httpRequest.setAttribute("model", model)

可以在EL中访问实例

        <ul>
            <c:forEach var="i" items="${ model.list }">
                <li>
                    <c:out value="${ i }"/>
                </li>
            </c:forEach>
        </ul>

因此,EL中的属性名称与模型类中的val的名称完全匹配。否则,您会得到一个java.lang.NoSuchMETHOExc0019。

 类似资料:
  • Scala提供了一套很好的集合实现,提供了一些集合类型的抽象。 Scala 集合分为可变的和不可变的集合。 可变集合可以在适当的地方被更新或扩展。这意味着你可以修改,添加,移除一个集合的元素。 而不可变集合类,相比之下,永远不会改变。不过,你仍然可以模拟添加,移除或更新操作。但是这些操作将在每一种情况下都返回一个新的集合,同时使原来的集合不发生改变。 接下来我们将为大家介绍几种常用集合类型的应用:

  • Scala 集合 Scala Set(集合)是没有重复的对象集合,所有的元素都是唯一的。 Scala 集合分为可变的和不可变的集合。 默认情况下,Scala 使用的是不可变集合,如果你想使用可变集合,需要引用 scala.collection.mutable.Set 包。 默认引用 scala.collection.immutable.Set,不可变集合实例如下: val set = Set(1

  • Scala提供了一套很好的集合实现,提供了一些集合类型的抽象。 Scala 集合分为可变的和不可变的集合。 可变集合可以在适当的地方被更新或扩展。这意味着你可以修改,添加,移除一个集合的元素。 而不可变集合类,相比之下,永远不会改变。不过,你仍然可以模拟添加,移除或更新操作。但是这些操作将在每一种情况下都返回一个新的集合,同时使原来的集合不发生改变。 接下来我们将为大家介绍几种常用集合类型的应用:

  • 尽管我的最大可用堆大小似乎大于我认为我需要的粗略内存量,但我还是尝试通过来增加堆大小([4])。虽然这解决了我的问题,但最好知道是否有更好的方法来创建这种随机数据,从而避免我不得不增加JVM可用的内存?因此,我有以下三个问题,如果有人能回答,我将不胜感激: > 在Scala中,尤其是在Scala shell中,垃圾回收何时发生?在上面的命令中,有什么可以收集,那么为什么要调用GC(对不起,第二部分

  • 问题内容: Environment : Tomcat 8 Spring Boot 1.5 JSF 2.2 Apache MyFaces Spring MVC Code : 我正在Servlet 3.0环境中集成Spring Boot和JSF 2.2。 配置类: JSFConfig.java - Config for JSF. Spring Boot Main Class : Managed Bea

  • 环境: JSF 2.2 Apache MyFaces Spring MVC 配置类: jsfconfig.java-Config for JSF。 Spring Boot主类: 托管Bean: java-用于JSF的托管Bean Facelets: 1)当我在。2)使用用户输入的值设置。3)但为空。4)这是否意味着Spring和JSF没有集成?我还注册了 我还尝试从userbean.java中删除