JSF: смешивание параметров GET & POST - PullRequest
2 голосов
/ 16 января 2012

Я пытаюсь отправить запрос POST со страницы, которая уже содержит параметр GET.Не выдается никакой ошибки, но поток управления, кажется, перепрыгивает через фазу приложения invoke.Если я пытаюсь выполнить тот же запрос POST со страницы без параметров GET, все работает отлично.

Реализация шаблона В этом случае реализуется необходимый компонент в зависимости от параметра GET с именем * 1005.* действие

<ui:define name = "front">

    <cd:accountSettings rendered = "${accountController.action == 'details'}"/>

    <cd:accountTabShortcut rendered = "${accountController.action == 'loginfo'}"/>  

</ui:define>

Компонент

<cc:implementation>

    <h:form id = "auth-fm">

        <div class = "fm-input">
            <h:outputLabel for="firstName">#{appMessage['form.label.name.first']}</h:outputLabel>
            <div class = "fm-input-elem">
                <h:inputText styleClass="input-auth" id="firstName" label="firstName" value="#{accountController.firstName}">
                    <f:validator validatorId="nameValidator" />
                    <f:ajax event = "blur" render = "firstNameMessage" />
                </h:inputText>
                <div class = "fm-err">
                    <h:message id = "firstNameMessage" for = "firstName" />
                </div>
            </div>
        </div>

        <div class = "fm-input">
            <h:outputLabel for="lastName">#{appMessage['form.label.name.last']}</h:outputLabel>
            <div class = "fm-input-elem">
                <h:inputText styleClass="input-auth" id="lastName" label="lastName" value="#{accountController.lastName}">
                    <f:validator validatorId="nameValidator" />
                    <f:ajax event = "blur" render = "lastNameMessage" />
                </h:inputText>
                <div class = "fm-err">
                    <h:message id = "lastNameMessage" for = "lastName" />
                </div>
            </div>
        </div>

        <div class = "fm-submit">
            <h:commandButton styleClass="bn-auth lk-bn-rng" id = "authButton" value="#{appMessage['form.text.register']}" action="#{accountController.changeDetails}" />
        </div>

    </h:form>

Управляемый компонент

public class AccountController extends BaseController{

    private String firstName;
    private String lastName;
    @PostConstruct
    public void init(){
        System.out.println("=> Account Controller - init() - enter");

        action = getParam("action");

        firstName = sessionController.getAuthUser().getFirstName();
                lastName = sessionController.getAuthUser().getLastName();

        System.out.println("=< Account Controller - init() - exit");
    }

     public String changeDetails(){
        System.out.println("=> Account Controller - Change Details - start");
        System.out.println("First Name: " + firstName);
        System.out.println("Last Name: " + lastName);
        System.out.println("=< Account Controller - Change Details - start");
        return "account";
    }
    }

КогдаЯ слежу за слушателями фазы, метод changeDetails () никогда не вызывается.Почтовый вызов осуществляется со страницы, например: mySite.com / account.xhtml? Action = details .Я думаю, что это может быть проблемой, но я не могу знать наверняка, и я не знаю никакого обходного пути, кроме как разделить содержимое на две страницы: accountDetails и accountLoginfo.

LE: Я использую JSF 2.0 с контейнером Glassfish3 и гранями XHTML для графического интерфейса.

1 Ответ

0 голосов
/ 16 января 2012

Поместите боб в область видимости. Таким образом, @PostConstruct будет выполняться только один раз при первоначальном запросе к представлению, и бин будет существовать до тех пор, пока вы взаимодействуете с тем же представлением с помощью ajax и вернете null или void в методах действия.

Смотри также:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...