JavaServerFaces(JSF)-ui:重复,不显示新元素

JavaServerFaces(JSF)-ui:重复,不显示新元素,jsf,Jsf,我正在开发一个简单的JSF应用程序,但我又被卡住了 基本上,我有一个人已经登录并想发布一条新消息: <h:form id="messageform"> <div style="width:900px; margin-top:-20px;"> <div id="count">250</div> <div id="barbox"><div id="bar"></div><

我正在开发一个简单的JSF应用程序,但我又被卡住了

基本上,我有一个人已经登录并想发布一条新消息:

<h:form id="messageform">
    <div style="width:900px; margin-top:-20px;">
        <div id="count">250</div>
        <div id="barbox"><div id="bar"></div></div>
        <h:inputTextarea id="textarea_message" cols="8" rows="5" value="#{messageBean.message}" />
    </div>
    <h:commandButton id="message_submit" value="" action="#{messageBean.postMessage(login.username)}" styleClass="input-submitbericht" />
</h:form>
这段代码工作得很好。我在messageBean中使用了一个简单的
System.out.println()
,元素添加得非常完美

现在,当我试图在屏幕上显示新消息时,它根本没有被检测到。就像元素从未添加到ArrayList

我使用此代码显示消息:

<ui:repeat value="#{database.alleBerichten}" var="berichten">
    <div class="record">
        <div class="#{(rowCount % 2) != 0 ? 'posteven' : 'postodd'}">
            <div class="text_wrapper text_wrapperm#{berichten.id}">
                #{berichten.bericht}
            </div>
            <div class="edit editm#{berichten.id}" style="display:none; width:890px;">
                <textarea class="editbox editboxm#{berichten.id}" cols="23" rows="3" id="m#{berichten.id}" method="message"></textarea>
            </div>
            <div class="postinfo"> door #{berichten.gebruiker.gebruikersnaam}
                <c:if test="#{berichten.gebruiker.gebruikersnaam == login.username}">
                    <h:form>
                        <a style="cursor: pointer;" class="edit_link" title="Edit" id="m#{berichten.id}">Wijzigen</a> -
                        <h:commandLink value="Verwijderen" action="#{database.deleteBericht(berichten.id)}" styleClass="delbutton"/>
                    </h:form>
                </c:if>
            </div>
        </div>
    </div>
    <c:set var="rowCount" value="#{rowCount + 1}"/>
</ui:repeat>

#{berichten.bericht}
门{berichten.gebruiker.gebruikersnaam}
维吉根-
因此,我认为问题在于
ui:repeat
部分,但我不知道如何解决这个问题…

在JSF
标记中有一个JSTL
标记。理解JSTL和JSF并不像您从编码中期望的那样同步运行是很重要的。它是JSTL,它在视图构建时首先运行,并且只生成带有JSF标记的视图。然后JSF在视图呈现期间运行并生成HTML输出

因此,当JSTL
标记运行时,JSF
var
属性后面的对象永远不可用。您希望改用JSF标记/属性。在这种特殊情况下,渲染的
属性是合适的

那么,替换

<c:if test="#{berichten.gebruiker.gebruikersnaam == login.username}">
    <h:form>
        <a style="cursor: pointer;" class="edit_link" title="Edit" id="m#{berichten.id}">Wijzigen</a> -
        <h:commandLink value="Verwijderen" action="#{database.deleteBericht(berichten.id)}" styleClass="delbutton"/>
    </h:form>
</c:if>
在JSF
标记中有一个JSTL
标记。理解JSTL和JSF并不像您从编码中期望的那样同步运行是很重要的。它是JSTL,它在视图构建时首先运行,并且只生成带有JSF标记的视图。然后JSF在视图呈现期间运行并生成HTML输出

因此,当JSTL
标记运行时,JSF
var
属性后面的对象永远不可用。您希望改用JSF标记/属性。在这种特殊情况下,渲染的
属性是合适的

那么,替换

<c:if test="#{berichten.gebruiker.gebruikersnaam == login.username}">
    <h:form>
        <a style="cursor: pointer;" class="edit_link" title="Edit" id="m#{berichten.id}">Wijzigen</a> -
        <h:commandLink value="Verwijderen" action="#{database.deleteBericht(berichten.id)}" styleClass="delbutton"/>
    </h:form>
</c:if>

好的,我不知道JSTL和JSF不会同步运行。但是用户发布的新消息仍然没有添加到输出中……这个问题是由其他原因引起的。确保消息bean中的
db
实例以及EL中的
{database}
引用引用的是完全相同的实例。好的,我不知道JSTL和JSF不同步运行。但是用户发布的新消息仍然没有添加到输出中……这个问题是由其他原因引起的。确保消息bean中的
db
实例以及EL中的
{database}
引用引用的实例完全相同。
<h:form rendered="#{berichten.gebruiker.gebruikersnaam == login.username}">
    <a style="cursor: pointer;" class="edit_link" title="Edit" id="m#{berichten.id}">Wijzigen</a> -
    <h:commandLink value="Verwijderen" action="#{database.deleteBericht(berichten.id)}" styleClass="delbutton"/>
</h:form>
<ui:repeat value="#{database.alleBerichten}" var="berichten" varStatus="loop">
    <div class="record">
        <div class="#{(loop.index % 2) != 0 ? 'posteven' : 'postodd'}">