JspWriter类型中的方法print(boolean)不适用于参数(void)



嗨,我正面临一个名为"方法print(boolean)的JspWriter类型不适用于参数(void) "的错误的JSP代码。

行内:<%= 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>

请告诉我哪里做错了。由于

<%= %>需要一个表达式,其值被打印到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编写器之外不应该有任何副作用。

最新更新