0

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

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

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

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

有没有人有一些神奇的想法?还是我完全错了?

提前致谢。

4

3 回答 3

1

您可以创建一个完全独立的托管 beanConfirmationBean并将其放在请求范围内。您可以通过每个托管属性注入工具在“父”bean 中访问它,或者自己创建它并将其放入请求映射中。

如果您想将第一种方法与许多其他 bean 关联起来,第一种方法需要大量工作faces-config.xml,所以我认为这不是很有吸引力。

第二种方式只需要在 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";
}
于 2009-12-15T16:44:43.227 回答
0

所以我有两个选择: -像这个解决方案一样覆盖 JSF 的导航管理,以在 to-view-id 标记中启用 EL

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

于 2009-12-16T10:08:06.637 回答
0

第二种解决方案: -像这个解决方案一样调用 EL的操作(存储在 session 中的确认Bean 中的字符串)

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

于 2009-12-16T10:12:35.927 回答