【问题标题】:JSF - create a generic confirmation page (dynamic navigation)JSF - 创建一个通用的确认页面(动态导航)
【发布时间】:2009-12-15 16:28:25
【问题描述】:

我会尝试解释我的问题。我在非常严格的环境中使用 IBM 的 JSF 1.2 实现(公司层和严格的约束 - 不要添加库等 -)。

我想创建一个可重复使用的简单确认页面(有点通用)。 例如 : 1-page1.jsp > 点击按钮 2-pageConfirmation.jsp > 2 个按钮是或否 3-单击 No > 返回 / 3bis-单击 Yes > 转到 someAction 然后转到 page2.jsp

所以我想在会话中存储我需要的东西,我来自哪里,我想去哪里。但问题是:如何调用我想要的操作?名称是动态的。假设我在单击“是”后在控制器中,我想从存储在会话中的名称中调用“myMethodAction”。我曾考虑使用表达式语言 api 对其进行评估,但由于无法访问 ELContext 并且不允许使用 el 包(el-api.jar)而被阻止。

总而言之,点击后,我试图调用一个动作/方法,然后重定向到一个页面,而不是调用一个页面。

有人有什么神奇的想法吗?还是我完全错了?

提前致谢。

【问题讨论】:

    标签: java jsf el


    【解决方案1】:

    您可以创建一个完全独立的托管 bean ConfirmationBean 并将其放在请求范围内。您可以通过每个managed property injection 设施在“父”bean 中访问它,或者自己创建它并将其放入请求映射中。

    第一种方式需要在faces-config.xml做很多工作,如果你想把它和很多其他的bean联系起来,所以我认为这不是很吸引人。

    第二种方式只需要在 action 方法中添加一些(可重用的)代码。我举个例子:

    public String submit() {
        ConfirmationBean conformationBean = new ConfirmationBean();
        confirmationBean.setOutcome("outcome"); // Set navigation case outcome where it should return back.
        FacesContext.getCurrentInstance().getExternalContext().getRequestMap().put("confirmationBean", confirmationBean);
        return "confirm";
    }
    

    confirm.jsf 应该在隐藏字段中显示“结果”,例如

    <h:selectBooleanCheckbox value="#{confirmationBean.confirm}" />
    <h:inputHidden value="#{confirmationBean.outcome}" />
    <h:commandButton value="confirm" action="#{confirmationBean.submit}" />
    

    ConfirmationBean 的动作方法应该是这样的:

    public String submit() {
        if (confirm) {
            return outcome;
        } else {
            return "confirm";
        }
    }
    

    或者如果你是三元运算符的粉丝;)

    public String submit() {
        return confirm ? outcome : "confirm";
    }
    

    【讨论】:

    • 嘿,谢谢你的反应!我目前正在尝试使用它,我会及时通知您。
    • 所以,您的解决方案非常好,除了我想调用一个操作而不是重定向到“结果”页面。例如,我想调用 myController.deleteTheItem(),它在做一些事情后会重定向到刷新的列表。我会发布我发现的内容。谢谢你的帮助。顺便说一句,您的网站是一个很好的有用信息来源;)
    • 然后在return 语句之前执行此操作。
    • 事实上我希望它是“动态的”/“通用的”。使用 Struts,我过去常常传递“Action”,但如果没有一些棘手的解决方案,JSF 似乎不允许它。感谢您的帮助,但我们决定寻找另一个功能解决方案。
    【解决方案2】:

    所以我有两个选择: -Override the navigation management of JSF like this solution to enable EL in the to-view-id tag

    (下一条消息中的下一个解决方案,由于我是stackoverflow的新手而受到限制)

    【讨论】:

      【解决方案3】:

      第二种解决方案: - 像这个解决方案一样调用action(字符串保存在session中的confirmationBean中)invoking EL

      这可能对这里的某些人有用,但对我来说不可用,因为我不允许导入库 (el-api)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-12
        • 2011-07-18
        • 2011-11-03
        • 1970-01-01
        • 1970-01-01
        • 2013-01-22
        • 2019-06-25
        • 1970-01-01
        相关资源
        最近更新 更多