【问题标题】:JSF Controller vs Struts ControllerJSF 控制器与 Struts 控制器
【发布时间】:2012-11-01 03:14:57
【问题描述】:

我在某处读到过

开发者可以通过创建一个 Action 来访问 struts 控制器 可以的对象 与控制器集成,而 Java Server Faces 技术不 允许访问控制器。

谁能帮我详细说明一下,这是什么意思?任何例子都会有很大帮助。

还有

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

我也对这一点感到困惑。请举个例子给我解释一下。

【问题讨论】:

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


    【解决方案1】:

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

    对于 JSF,它是一种完全不同类型的框架。它不像 Struts 2 那样面向“请求”,而是“面向组件”。这意味着 JSF 的概念粒度是页面上的组件小部件的概念。这在某种程度上处于不同的级别,或者可能与 struts 2 处理单个请求的方式完全不同。所以,在 JSF 中,框架更深地隐藏了控制器逻辑,主要是因为它更复杂。控制器逻辑必须从请求中获取传入数据,并确保将其映射并传递到与请求关联的页面上的适当组件小部件。开发者 api 都是关于组件合约的。

    【讨论】:

      【解决方案2】:

      我举个例子。 假设您有一个格式如下的 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
      
      }
      

      问候!

      【讨论】:

      • 但它与 JSF Controller 有何不同?我问他们的区别。
      • 你可以使用像 这样的标签来让控制器可以使用 myvar对 jsp 来说,这是一种更好的沟通方式。
      • 我实际上想了解 Struts 控制器和 JSF 控制器之间的区别,以及我上面在我的问题中提到的语句它们是什么意思。我要求参考这两个语句的代码了解区别
      猜你喜欢
      • 1970-01-01
      • 2011-11-18
      • 1970-01-01
      • 2012-05-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-03
      • 1970-01-01
      • 2015-01-24
      相关资源
      最近更新 更多