EL语法错误:表达式无法以二元运算符开头

时间:2012-09-01 08:52:25

标签: java eclipse el

对于如何解决此警告,任何人都有任何创意吗?

  

EL语法错误:表达式无法以二元运算符

开头

由以下代码引起:

String.format("#{myController.deleteItemById(%d)}", getId())

我的代码之前看起来像这样:

"#{myController.deleteItemById(" + getId() + ")}"

但这导致eclipse产生以下警告:

  

EL语法错误:字符串未关闭

更新:

@ManagedBean(name = "myController")
@ViewScoped
public class MyController implements Serializable {

  private long id;
  private HtmlPanelGroup panel;

  public long getId() {return this.id; }

  private void getPanel() {

  /// bunch of code for programatically creating a form

    HtmlCommandButton deleteButton = new HtmlCommandButton();
    deleteButton.setId(id);
    deleteButton.setValue(value);
    deleteButton.setActionExpression(/* EL expression used here */);
   }
}

<?xml version='1.0' encoding='UTF-8' ?>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets"> 
    <!-- some other elements removed for the sake of clarity -->      
    <h:body>
        <h:panelGroup binding="#{myController.panel}" />
    </h:body>
</html>

3 个答案:

答案 0 :(得分:2)

您可以使用@SupressWarnings("el-syntax")方法进行注释,Eclipse将停止唠叨您。它会要求压制未知(对Java框架)supresswarnings等等。如果你不让它压制,它会向注释添加警告。

但是,通过在运行时构建EL表达式,您可以将应用程序公开到EL Injection

有人可以通过注入方法调用和东西在您的服务器上运行恶意代码。

检查EL中间的弦的原点是否来自完全安全的原点

sanitize your inputs以防止它。

答案 1 :(得分:1)

您的el表达式,尽管在运行时构造有效。但Eclipse在开发/编译时显示警告。因此,它现在可以在编译时检查在运行时将返回getId的内容,以便正确验证el表达式。

对于这样的运行时构造表达式,如果他们打扰你,你可以禁用IDE的警告。我个人不会禁用它们,所以他们会永远记住我那个el表达式的特殊内容。

答案 2 :(得分:-1)

"#{myController.deleteItemById(" + getId() + ")}"

在这段代码中我理解的是myController是你的托管bean,deleteItemById是你在该托管Bean中实现的方法,只需调用你的方法并处理你想要的那个方法,获取你的id并实现你的CRUD操作必要的,如果它在数据表中并且你想发送你可以使用的对象如下:

           <h:dataTable value="#{bean.list}" var="item">
                <h:column><f:facet name="header">ID</f:facet>#{item.id}</h:column>
                <h:column><f:facet name="header">Value</f:facet>#{item.value}</h:column>
                <h:column><h:commandButton value="edit" action="#{bean.edit(item)}" /></h:column>
                <h:column><h:commandButton value="delete" action="#{bean.delete(item)}" /></h:column>
            </h:dataTable>

请参阅here(BalusC的帖子“@ViewScoped的好处和陷阱”)以获得完整的教程