【问题标题】:JSF: mixing GET & POST parametersJSF:混合 GET 和 POST 参数
【发布时间】:2012-02-10 23:40:28
【问题描述】:

我正在尝试从已经包含 GET 参数的页面发送 POST 请求。没有抛出错误,但控制流似乎跳过了调用应用程序阶段。如果我在没有 GET 参数的页面上尝试相同的 POST 请求,那么一切都会正常工作。

模板实现 这将根据名为 action

的 GET 参数实现所需的组件
<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>

托管 Bean

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。

乐: 我将 JSF 2.0 与 Glassfish3 容器和用于 GUI 的 XHTML facelets 一起使用。

【问题讨论】:

  • 需要更多信息...什么应用服务器?什么jsf实现?您是使用 VDL 还是 JSP 进行视图渲染?
  • @JohnAment 我更新了问题
  • 所以你希望它在不点击命令按钮的情况下调用方法?我认为您需要添加一个视图参数。

标签: java jsf


【解决方案1】:

将 bean 放在视图范围内。这样,@PostConstruct 将只在视图上的初始请求时运行一次,只要您通过 ajax 与同一视图交互并在操作方法上返回 nullvoid,bean 就会存在。

另见:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    • 1970-01-01
    • 2011-10-05
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多