2009-12-15 46 views
0

我会尽力解释我的问题。我在非常非常严格的环境(公司层和严格的约束 - 不要添加库等)中使用IBM的JSF 1.2实现。JSF - 创建一个通用确认页面(动态导航)

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

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

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

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

在此先感谢。

回答

1

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

如果你想将它与很多其他豆相关联,第一种方法需要在faces-config.xml很多工作,所以我不认为这是非常有吸引力的。

第二种方式只需要一点(可重复使用)的代码在操作方法。我举一个例子:

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应该有一个隐藏字段,例如在“结果”

​​3210

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

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

,或者如果你是三元运营商的粉丝;)

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

嘿,谢谢你的反应!我正在尝试使用它,我会让你保持最新状态。 – Baztoune 2009-12-16 08:07:26

+0

因此,您的解决方案非常好,除非我想调用某个操作而不是重定向到“结果”页面。例如,我想调用myController.deleteTheItem(),在做了一些事情之后,它会重定向到刷新列表。我会发布我发现的内容。 感谢您的帮助。顺便说一句,你的网站是一个很有用的信息来源;) – Baztoune 2009-12-16 09:27:26

+0

然后就在'return'语句之前这样做。 – BalusC 2009-12-16 11:05:52

0

解决方法二: - 呼叫(存储在confirmationBean会话字符串)的作用invoking EL这样的解决方案

这可能是这对一些人来说很有用,但由于我不允许导入库(el-api)而无法使用。