【问题标题】:IntelliJ warns "Cannot resolve variable" on EL variables declared in parent page of includeIntelliJ 在包含的父页面中声明的 EL 变量上警告“无法解析变量”
【发布时间】:2015-08-22 15:28:32
【问题描述】:

我创建了一个在其自己的包含文件中定义的表列。 <ui:include> 在其他几个 Facelets 页面中使用此列,以便在某些数据表中使用。包含列使用一个名为“linje”的变量(它是一个 java 类),该变量在包含该列的父页面中定义。

即使代码有效,我也无法从 IntelliJ 中包含的文件导航到 java 类。有没有办法做到这一点?我还从 IntellJ 收到很多警告“无法解析变量“linje”。

使用该列的代码

<rich:dataTable value="#{someMBean.someLinjeModel}"
                        reRender="ds-h" var="linje" id="vt"
                        rows="#{someBean.rows}" styleClass="standard"
                        rowClasses="odd,even">

            <ui:include src="someColumn.xhtml"></ui:include>

来自 someColumn.xhtml 的代码

<rich:column id="status" rendered="#{!linje.someRenderingCheck}">
        <f:facet name="header">
            <h:outputText value="Status"/>
        </f:facet>
        <h:outputText value="#{linje.someText}"/>
</rich:column>

【问题讨论】:

    标签: jsf intellij-idea el facelets uiinclude


    【解决方案1】:

    您可以将变量linje 作为&lt;ui:unclude&gt; 的参数传递。

    例如:

    <ui:include src="someColumn.xhtml">
        <ui:param name="linje" value="#{linje}" />
    </ui:include>
    

    这将是someColumn.xhtml 的请求参数,您可以将其复制到另一个(使用&lt;c:set&gt; 标签),以避免IDE 警告:

    <c:set var="linje" value="#{linje}" />
    

    【讨论】:

    • 如果您使用 c:set 技巧,那么 IDE 不会再抱怨它不知道 linje 是什么,但是如果您尝试使用 linje 的属性,例如在#{linje.someText}这样的表达式中,它会抱怨linje没有属性someText(因为它不知道linje有什么类型)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-08
    • 1970-01-01
    • 2017-06-02
    • 2013-05-11
    • 1970-01-01
    • 2019-09-22
    • 2016-12-07
    相关资源
    最近更新 更多