使用return语句重定向会影响下一页中的呈现过程

时间:2015-06-01 09:46:53

标签: ajax jsf datatable commandlink

我在渲染数据表时遇到问题。 在我的应用程序中,我有这个导航栏:

<h:form>
    <ul class="nav nav-tabs"> 
        <li class="active" role="presentation">
            <h:commandLink value="Veranstaltungen" action="#{eventController.redirect('veranstaltung.xhtml')}"/>
        </li>                       
        <li role="presentation"> 
            <h:commandLink value="Beacons" action="#{beaconcontroller.redirect('beacon.xhtml')}"/>
        </li>  
        [...]         
    </ul>
</h:form>

重定向(beaconcontroller):

public String redirect(String link) {
    beacons = database.getAllBeacons();
    return "./" + link;
}

导航效果很好,但是当我在beacon.xhtml中提交表单beaconData时,我的数据表将无法呈现。

<h:form id="beaconsTable">
    <p:dataTable value="#{beaconcontroller.beacons}" var="b"
        tableStyleClass="table table-striped"
        emptyMessage="Keine Beacons verfügbar"
        style="font-size:14px"
        rowIndexVar="rowIndex"
        rowStyleClass="#{(rowIndex mod 2) eq 0 ? 'first-row' : 'second-row'}"
        >
        <p:column style="float:left;border:none;">
            <f:facet name="header">
                   <h:commandLink actionListener="#{beaconcontroller.sortBeacons}"> 
                         <f:ajax execute="@this" render="beaconsTable"/>
                         Beacons 
                   </h:commandLink>    
            </f:facet>
            <h:commandLink>
                 <f:ajax listener="#{beaconcontroller.fillFields(b)}" execute="@this" render=":beaconData beaconsTable :delete"/>
                 <h:outputText value="#{beaconcontroller.getCompleteString(b)}" style="#{beaconcontroller.currentBeacon == b ? 'color:#337AB7' : 'color:#555555'}"></h:outputText>
            </h:commandLink>
        </p:column>
    </p:dataTable>
</h:form>


</div>
<div class="col-lg-6">
    <h:form role="form" id="beaconData" enctype="multipart/form-data">
        <div class="form-group">
            <label>UUID*</label>
            <h:inputText id="id_uuid" binding="#{uuidAttribute}" class="form-control" value="#{beaconcontroller.uuid}" p:placeholder="Unternehmen" required="true" requiredMessage="Bitte UUID angeben" validatorMessage="Bitte nur Zahlen und Buchstaben angeben">
                <f:validateRegex pattern="[0-9a-zA-Z]+"/>
            </h:inputText>
            <h:message styleClass="errMessage" for="id_uuid" style="color: red"/>
        </div>
        [...]                  
        <h:commandButton type="submit" value="Speichern" actionListener="#{beaconcontroller.saveData}" class="btn btn-primary" disabled="#{beaconcontroller.currentBeacon == null}">
            <f:ajax render="beaconData :beaconsTable" execute="@form"/>
        </h:commandButton>
    </h:form>
</div>

单击数据表中的其他条目可解决问题。然后表格将在提交时呈现。但是为什么它第一次不起作用呢?

当我现在将导航栏中的action="#{beaconcontroller.redirect('beacon.xhtml')}"更改为action="beacon.xhtml"时,它的工作正常。我认为这些表达方式含义相同?

0 个答案:

没有答案