对于如何解决此警告,任何人都有任何创意吗?
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>
答案 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的好处和陷阱”)以获得完整的教程