【问题标题】:The method print(boolean) in the type JspWriter is not applicable for the arguments (void)JspWriter 类型中的 print(boolean) 方法不适用于参数 (void)
【发布时间】:2014-06-20 23:51:26
【问题描述】:

您好,我在 GAE 中的 JSP 代码遇到了一个名为“JspWriter 类型中的方法 print(boolean) 不适用于参数 (void)”的错误。

在线:<%= request.getSession(true).setAttribute("state","firstNumber") %>

代码如下:

`

  <c:when test='${param.event == "NewCall"}'>
      <% 
         Response resp1=new Response();
         CollectDtmf cd= new CollectDtmf(); 
         cd.addPlayText("Welcome. Please enter the first number. Terminate with #");           
         resp1.addCollectDtmf(cd);
      %>
      <%= request.getSession(true).setAttribute("state","firstNumber") %> 
      <% out.println(resp1.getXML()); %>
  </c:when>

`

请告诉我在这里做错了什么。谢谢

【问题讨论】:

    标签: java jsp google-app-engine session


    【解决方案1】:

    &lt;%= %&gt;expects 一个表达式,其值被打印到 JSP 的编写器。以下

    <%= foo %>
    

    因此等价于

    out.print(foo);
    
    request.getSession(true).setAttribute("state","firstNumber")
    

    是一个类型为 void 的表达式。而且你不能打印一个空白。

    你想要的很简单

    <% request.getSession(true).setAttribute("state","firstNumber") %>
    

    当然,因为它已经被无数次重新散列,scriptlet 不应该在 JSP 中使用。 JSP 是视图组件,只能使用 JSP EL、JSTL 和其他自定义标签生成 HTML。更不用说设置会话属性通常是一个坏主意,在视图组件中更是一个坏主意,除了打印到 JSP 编写器之外,它不应该有任何副作用。

    【讨论】:

    • 感谢 JB 的回答。这正在按照您的建议工作,并在 appengine-web.xml 文件中添加:&lt;sessions-enabled&gt;true&lt;/sessions-enabled&gt;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多