2

任何人都对我如何解决这个警告有任何创造性的想法?

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>
4

3 回答 3

2

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

.

但是通过在运行时构建 EL 表达式,您将应用程序暴露给EL Injection

.

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

检查EL中间的字符串的来源是否来自完全安全的来源,

清理您的输入以防止它。

于 2014-02-12T14:51:13.293 回答
1

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

对于这种运行时构造的表达式,如果它们打扰您,您可以禁用来自 IDE 的警告。我个人不会禁用它们,所以他们会永远记住我,这是那个el表达的特别之处。

于 2012-09-01T12:10:53.703 回答
-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>

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

于 2012-09-01T09:06:29.270 回答