无法使用jstl将java bean的值绑定到jsp

时间:2013-05-13 12:24:06

标签: java javascript jsp jstl runtime-error

我有一个我在bean中设置的String getter和setter。

我试图使用jstl获取我的jsp中的值,如下所示:

    <jsp:useBean class="com.test.MyBean" id="results" scope="request"/>


    <script type="text/javascript">
    function setMyFields(){
    var flag="<c:out value='${results.sdateFlag}'/>";
    alert(flag);                
    var text_box = document.getElementById('mySelectedDate');
    if(flag=="true"){
    text_box.setAttribute('disabled', 'disabled');
    }
    }
    window.onload = setMyFields;
    </script>

我已经在我的jsp中导入了jstl核心。

但是当我这样做时,我得到这样的错误:

    javax.servlet.ServletException: Unable to find a value for "sdateFlag" in object of class "com.test.MyBean" using operator "."
    at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:660)
    at com.ibm._jsp._pageMyAmount._jspService(_pageMyAmount.java:306)
    at com.ibm.ws.jsp.runtime.HttpJspBase.service(HttpJspBase.java:87)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1101)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:569)
    at com.ibm.ws.wswebcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:478)
    at com.ibm.wsspi.webcontainer.servlet.GenericServletWrapper.handleRequest(GenericServletWrapper.java:122)
    at com.ibm.ws.jsp.webcontainerext.AbstractJSPExtensionServletWrapper.handleRequest(AbstractJSPExtensionServletWrapper.java:226)
    at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:321)

但是我一直在使用java调试器调试java类,似乎值已经设置好了。那么为什么它没有得到价值呢?

编辑:这些是我的bean的setter和getter:

public void setDateFlag(String  b)          { sDateFlag = b; }
public String isDateFlag()                  { return sDateFlag; }

这里有什么问题?我错过了什么吗?

2 个答案:

答案 0 :(得分:1)

您将dateFlag视为布尔属性,但实际上是String。因此,您应该将“getter”称为getDateFlag,而不是isDateFlag。如上所述,isPropertyName语法仅适用于boolean类型的属性。

此外,并不真正需要<c:out value='${results.dateFlag}'/>。您应该只需${results.dateFlag}

答案 1 :(得分:0)

所以,我解决了问题,这是一个奇怪的解决方案。似乎问题是,声明的任何变量必须遵循java标准。我的问题是,我在我的原始专有代码中给出了变量名称sDateFlag,该代码不遵循java命名约定。当我删除它并将其作为flag给出时,它开始工作。我在这里使用此链接来解答答案:JSTL。虽然它不完全正确,但它引导我解决问题的根本原因。我要感谢所有回复我的人,让这个过程变得简单。