JSF控制器与Struts控制器

时间:2012-11-12 17:06:14

标签: java model-view-controller jsf java-ee struts

我在某处读过

  

开发人员可以通过创建Action来访问struts控制器   可以的对象       与控制器集成,而Java Server Faces技术则没有       允许访问控制器。

任何人都可以请我为此详细说明,这是什么意思?任何一个例子都会有很大的帮助。

另外

  

Struts控制器可以对每个Action执行访问控制等操作   基于       用户角色。 JSF不提供此功能。

我也很困惑这一点。请以一个例子为我解释一下。

2 个答案:

答案 0 :(得分:0)

当您编写Struts 2(对Struts也是如此)时,您正在控制器本身扩展框架。 Action是您使用自己的操作扩展的基类,允许您扩展控制器逻辑,通常通过调用业务逻辑,然后重定向到您的一个结果视图(称为“结果”) s2)基于该逻辑的结果。当然,你可以对动作进行访问控制等操作;但是你可以对一个动作做任何事情。我想这个引用的片段只是指出Struts 2的概念粒度与Action(控制器)的每个请求实例同步。

至于JSF,它是一种完全不同的框架类型。它不是像Struts 2那样面向“请求”,而是“面向组件”。这意味着JSF的概念粒度是页面上组件窗口小部件的概念。这在某种程度上与struts 2完全关于单个请求的处理的方式处于不同的水平,或者可能是正交的。因此,在JSF中,框架更加隐藏了控制器逻辑,主要是因为它更复杂。控制器逻辑必须从请求中获取传入数据,并确保它被映射并传递到与请求关联的页面上的相应组件窗口小部件。开发人员api就是组件合同。

答案 1 :(得分:0)

我举一个例子。 假设你有一个jsp文件,其格式如下:

<form name="myform" id="myform" action="<%=formAction%>" method="post">

</form>

其中包含一些输入。在jsp的顶部,您可以定义您的操作:

<portlet:actionURL var="formAction">
<portlet:param name="action" value="submitForm"/>
</portlet:actionURL>

因此,当您单击该表单的提交按钮时,您的控制器的processAction方法会执行您为其操作定义的内容,例如:

String action = request.getParameter("action");
if ("submitForm".equals(action)) {

   //do something

}

问候!