Ein Formular auf mehrere JSF-Tabs verteilen ?

Tonteria

Grünschnabel
Hi,

ist es möglich dass man ein umfangreiches Formular auf mehrere Tabs verteilen kann, die alle auf eigene Views verweisen ? In einer Weise dass man unter den Tabs einen submit-Button hat, der die Informationen aus allen Views nimmt und abschickt ?

Beispiel home.xhtml :

HTML:
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:s="http://jboss.com/products/seam/taglib"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:rich="http://richfaces.org/rich"
    xmlns:a4j="http://richfaces.org/a4j"
    template="layout/template.xhtml">

    <ui:define name="body">

        <h1>Heading</h1>
        <rich:panel>
            <h:panelGrid columns="2">
                <h:graphicImage value="/img/bild.gif" alt="Seam logo"/>
                <s:div styleClass="info">
                    <p><strong>Heading</strong></p>
                </s:div>
            </h:panelGrid>
        </rich:panel>
        
    <rich:tabPanel switchType="ajax" id="menuPanelGroupLeft">
    
    <rich:tab label="Übersicht">
    <a4j:include  viewId="/overview.xhtml" rendered="#{identity.loggedIn}"/>
    </rich:tab>
    
    <rich:tab label="Autoren">
    <a4j:include  viewId="/authors.xhtml" rendered="#{identity.loggedIn}" />
    </rich:tab>
    
    <rich:tab label="Institutionen">
    <a4j:include  viewId="/institutions.xhtml" rendered="#{identity.loggedIn}" />
    </rich:tab>
    
    <rich:tab label="Inhalt">
    <a4j:include  viewId="/content.xhtml" rendered="#{identity.loggedIn}" />
    </rich:tab>
    
    </rich:tabPanel>

<!-- Hier kommen die Buttons? -->

    </ui:define>
</ui:composition>

Besten Dank für jeden Hinweis im Voraus.

Herzliche Grüße,

Tonteria
 
Hallo Tonteria,

vielleicht habe ich den Sinn der Frage noch nicht ganz verstanden, ich glaube Du musst gar nichts mehr machen, dass sollte schon funktionieren :)

Hinter den a4j:include stecken ja wiederum xhtlm Seiten, die letzten Endes ihre Werte in eine Bean stecken.

Meine Frage an Dich wäre, welchen Scope hat die Bean? Ich tippe auf View Scope, da Du JSF 2 verwendest.

Denn, dann macht die Idee keinen Sinn :)

Dein rich:tabPanel hat switchType="ajax". Das bedeutet, dass die Werte der Eingaben an die Attribute der Bean übergeben werden, in dem Moment, wo ein Tab gewechselt wird oder die Seite submitted wird.

Die Buttons, die Du auf der Seite anzeigst, sollen doch "nur" die Verarbeitung der Werte veranlassen, oder? Wo ist denn das Problem, dass Du hast?
 
Hi Sentoo,

vielen Dank für deine Hilfe. Bisher hatte ich noch kein Problem, konnte mir nur nicht genau vorstellen, wie man den Entity Manager veranlasst mit einem Button gleich mehrere Entities zu persistieren. Für die Sessionbeans habe ich keinen scope angegeben, dann sollten diese standardmäßig view-scope erhalten, oder ?

Also was erstmal zu tun ist :

1. switchType="client" setzen

2. scope der sessionbeans (für die manipulation der entity-beans) auf "Conversation" setzen

?

Habe nun :

HTML:
    <h:commandButton id="add" value="Submit"
    action="#{entityHandler.persistData}" />

in die home.xhtml integriert.
Leider passiert nichts. Wenn ich den Button in den View integriere, in dem auch die Eingabefelder sind, funktioniert es. Hmm...
 
Zuletzt bearbeitet:
Hi Tonteria,

nein, default ist der request scope.
http://mkblog.exadel.com/jsf/learning-jsf2-managed-beans/ hat gesagt.:
@RequestScoped – sets the scope (request) into which this bean will be placed. If scope is not specified then bean will default to request scope.

Und ich meine @ViewScoped sollte reichen. Den Conversation Scope gibt es (eigentlich) nicht. Außer ihr verwendet Frameworks, die den anbieten. Das weiß ich nicht.

Wenn nichts funktioniert, wo hast Du denn die <h:form> tags? Stecken die in der "layout/template.xhtml"?

Ah, fast vergessen. Der switchtype "ajax" ist schon ok. Ihr müsst ausprobieren, welcher switchtype für euch gut - im Sinne von gefühlter Reaktionszeit beim User - ist.
 
Zuletzt bearbeitet:
Hi Sentoo,

meine Frage war wahrscheinlich nicht präzise genug gestellt und ich hab zu sehr mit Codebeispielen gegeizt. Jedenfalls hat in der home.xhtml die <h:form> </h:form> - Umkleidung gefehlt. Also ein absolut vermeidbarer Fehler :-( . Danke trotzdem für deine Mithilfe ! Weiter so ! Ich werd versuchen mich auch einzubringen sobald ich entsprechendes Wissen vorweisen kann.

Beste Grüße,

Tonteria
 
Zurück