Новые значения не связываются с объектом поддержки формы при публикации в шве - PullRequest
0 голосов
/ 07 апреля 2011

У меня есть несколько форм, которые заполняются ThingPageBean.Каждая из этих форм отправляется с <h:commandButton>, где действие настроено на вызов #{thingPageBean.doAmazingThing(oneStuff)}.Все поля являются статическими, за исключением contactEmail и contactPhone, где я хочу использовать <h:inputText> вместо <h:outputText>, чтобы пользователь мог установить новое значение, если он пожелает.

Проблема в том, что новые значения не привязаны к объекту, полученному в doAmazingThing(OneStuff oneStuff) в ThingPageBean.Старые остаются.

Что я делаю не так?Я пропустил какую-то важную часть?

Мой Бин:

@SuppressWarnings({"unchecked"})
@AutoCreate
@Name("thingPageBean")
@Scope(ScopeType.EVENT)
@Restrict("#{s:hasRole('admin')}")
public class ThingPageBean implements Serializable {

    @In
    StuffService stuffService;

    @In
    private StatusMessages statusMessages;


    public String doAmazingThing(OneStuff oneStuff) {
        return this.stuffService.doAmazingStuffToThing(oneStuff);    
    }

    @Factory(value = "notHandledStuff")
    public List<Stuff> notHandledStuff() {
        return this.stuffService.searchNotHandledStuff();
    }
}

Мой файл xhtml:

<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:c="http://java.sun.com/jstl/core"
                template="/layout/SiteTemplate.xhtml">


    <ui:param name="robots" value="noindex"/>

    <!-- hide blocks -->
    <ui:param name="preContentHide" value="true"/>

    <ui:define name="mainContent">

            <c:set var="stuff" value="#{notHandledStuff}"/>
            <s:div styleClass="section"
                   rendered="#{stuff == null or stuff.size==0}">
                <h:outputText value="#{messages['stuff.no']}"/>
            </s:div>
            <s:div styleClass="section"
                   rendered="#{stuff != null and stuff.size>0}">
                <br/>
                <ui:repeat var="oneStuff" value="#{stuff}">
                    <h:form id="stuffForm">
                        <hr style="margin-top:8px;margin-bottom:4px;"/>
                        <table border="1">
                            <tr>
                                <td><b>Company name:</b></td>
                                <td width="780px"><h:outputText value="#{oneStuff.companyName}"/></td>
                            </tr>
                            <tr>
                                <td><b>street:</b></td>
                                <td><h:outputText value="#{oneStuff.street}"/></td>
                                <td/>
                            </tr>
                            <tr>
                                <td><b>zip:</b></td>
                                <td><h:outputText value="#{oneStuff.zip}"/></td>
                                <td/>
                            </tr>
                            <tr>
                                <td><b>city:</b></td>
                                <td><h:outputText value="#{oneStuff.city}"/></td>
                                <td/>
                            </tr>
                            <tr>
                                <td style="padding-top:10px"><b>contactPerson:</b></td>
                                <td><h:outputText value="#{oneStuff.contactPersonName}"/></td>
                                <td/>
                            </tr>
                            <tr>
                                <td><b>contactEmail:</b></td>
                                <td><h:inputText value="#{oneStuff.contactEmail}"/></td>
                                <td/>
                            </tr>
                            <tr>
                                <td><b>contactPhone:</b></td>
                                <td><h:inputText id="contactPhone" value="#{oneStuff.contactPhone}"/></td>
                                <td/>
                            </tr>

                                    <h:commandButton id="submit"  value="couple"
                                                     action="#{thingPageBean.doAmazingThing(oneStuff)}"/>
                                </td>
                            </tr>
                        </table>
                      </s:div>
                    </h:form>
                </ui:repeat>

                <hr style="margin-top:8px;margin-bottom:4px;"/>
            </s:div>
            <br/>
        </div>
    </ui:define>
</ui:composition>

Спасибо, Джейкоб

Ответы [ 2 ]

0 голосов
/ 08 апреля 2011

Проблема, казалось, была с несколькими формами. Переместил тег <h:form> за пределы тега <ui:repeat> и вуаля все работает.

0 голосов
/ 07 апреля 2011

Я предлагаю изменить @Scope(ScopeType.EVENT)

Контекст события (запроса): охватывает запрос сервера от представления восстановления до ответа ответа.

наобласть действия страницы: @Scope(ScopeType.PAGE)

Начинается на этапе вызова приложения, предшествующего отображению страницы, и продолжается до конца любой фазы приложения вызова запроса лиц, исходящих с этой страницы.Запросы, не связанные с лицами, не распространяются на область страницы.

, поскольку эти данные нужны для более длинного разговора, а не только для события (цитаты из Seam Doc )

...