javax.el.E​​LException:在类型com.example.Bean上读取'foo'时出错

时间:2015-12-10 07:31:58

标签: jsf properties el getter

我正在阅读the following tutorial

  

h:dataTable / @值中使用的表达式通常指定一个属性       为其定义了getter的名称,这意味着在控制器中       BookController类定义了属性书(可选)以及a       名为getBooks的方法(这是必需的)。在这种特殊情况下它是       只需足以定义getBooks方法,因为不需要       在控制器类中预订属性

我一直在尝试在我的eclipse和tomcat 7中运用这样的想法。但它一直让我感到满意:

  

javax.el.E​​LException:/views/books/listAll.xhtml @ 9,60 value =“#{bookController.books}”:在类型pl.ctrl.BookController上读取'books'时出错

我的问题是,是否有可能:

getBooks()

虽然#{bookController}托管bean中没有public float scrollSpeed = 10.0f; public GameObject[] maps; Camera mainCamera; private float topBound; private float bottomBound; private Vector3 pos; private SpriteRenderer currentSprite; private int mapIndex; void Awake () { mapIndex = 0; mainCamera = Camera.main; currentSprite = maps [mapIndex].GetComponent<SpriteRenderer> (); bottomBound = currentSprite.sprite.bounds.size.y * -1; topBound = currentSprite.sprite.bounds.size.y + currentSprite.gameObject.transform.position.y; } void Update () { if (Input.touchCount > 0 && Input.GetTouch (0).phase == TouchPhase.Moved) { Vector2 touchDeltaPosition = Input.GetTouch(0).deltaPosition; mainCamera.transform.Translate(0f,-touchDeltaPosition.y * scrollSpeed * Time.deltaTime,0f); } } private float getAxisDelta(float axisDelta,float camMin,float camMax,float bottom,float top) { //get where edge of camera will have moved if full translate is done float boundaryMinPixelsDestination = camMin - Mathf.Abs(axisDelta); float boundaryMaxPixelsDestination = camMax + Mathf.Abs(axisDelta); Debug.Log("MaxPixels:"+boundaryMaxPixelsDestination+"="+camMax+"+"+Mathf.Abs(axisDelta)); //check to see if you're within the border if ((boundaryMinPixelsDestination <= bottom && axisDelta > 0) || (boundaryMaxPixelsDestination >= top && axisDelta < 0)) { axisDelta = 0; } return axisDelta; } private float camBoundPos(string pos) { float bounds = 0f; if (pos == "top") bounds = mainCamera.transform.position.y + mainCamera.orthographicSize; if(pos == "bottom") bounds = mainCamera.transform.position.y - mainCamera.orthographicSize; return bounds; } 属性但只有<?php $dateTime=date('Y-m-d h:m:i'); $arr = explode(" ",$dateTime); $date=explode("-",$arr[0]); $monthNum = $date[1]; echo $monthName = date("F", mktime(0, 0, 0, $monthNum, 10)); ?> getter方法?

1 个答案:

答案 0 :(得分:3)

你的问题与本书所说的有所不同。如果JSF / EL无法完整地找到getter方法,那么您将获得以下异常:

  

javax.el.PropertyNotFoundException: Property 'books' not found on type pl.ctrl.BookController

或者如果它无法完整地找到bean本身:

  

javax.el.PropertyNotFoundException: Target Unreachable, identifier 'bookController' resolved to null

但你得到了:

  

javax.el.E​​LException:在类型pl.ctrl.BookController上读取“books”时出错

这意味着找到了bean和getter方法,但调用getter方法引发了异常。基本上,以下是在JSF / EL的封面下发生的:

try {
    Object result = bookController.getBooks();
} catch (Exception e) {
    throw new ELException("Error reading 'books' on type pl.ctrl.BookController", e);
}

请注意e作为ELException的原因传递。因此,原始异常必须在堆栈跟踪中的“由...引起”中显示,而您在问题的任何位置都没有发布。最底层的是所有人的根本原​​因,也是您具体问题的答案。如果您无法解释它,只需将异常类型和消息复制到一个体面的搜索引擎中即可找到答案和线索。

对于具体问题,

无关,从getter方法抛出的异常反过来表示可疑代码。 getter方法不应该执行任何异常敏感的业务逻辑。也就是说,它可以在每个bean的生命中被多次调用,并且在所有bean的生命期间反复重复相同的业务逻辑是非常低效的。停止这样做并将业务逻辑移动到一次性初始化或动作/事件监听器方法。 getter方法必须只返回已经准备好的属性。另请参阅Why JSF calls getters multiple timesHow and when should I load the model from database for h:dataTable