JSF 最佳实践:自定义组件和 JavaScript

2023-12-06

我正在开发一个 JSF 自定义组件,使用我在以下书中找到的信息Apress 的 Pro JSF 和 HTML5.

到目前为止,我成功开发了:

  • java类获取组件中要渲染的数据
  • java组件类
  • java渲染器类
  • 标签库文件
  • 呈现 taglib 的示例页面

一切正常,组件已成功渲染。

Now 我想向渲染的元素添加 javascript 事件和行为更具体地说,我的自定义组件的目的是在网页上呈现菜单,我想向菜单条目添加下拉效果。我知道如何用 JavaScript 编写整个代码,但我不知道的是:

将 javascript 事件和行为添加到自定义组件中呈现的元素的最佳实践是什么?

JS文件应该放在哪里?如何将事件绑定到元素?它是在渲染类中完成的,还是之后在网页上完成的?

谢谢,如果需要,我愿意提供有关我的代码的更多具体信息。


Java组件类

Note: CosmoMenu 类只是一个 bean。它主要存储一个菜单树(一个标签、一个 ID 和一组子项,如果有的话)。

package components;

import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
import domain.CosmoMenu;
import javax.faces.component.FacesComponent;
import javax.faces.component.UIComponentBase;


@FacesComponent(CosmoMenuComponent.COMPONENT_TYPE)
public class CosmoMenuComponent extends UIComponentBase{

  /** Component family of {@link CosmoMenuComponent}.        */
  public static final String COMPONENT_FAMILY = "CosmoMenu";

  /** Component type of {@link CosmoMenuComponent}.          */ 
  public static final String COMPONENT_TYPE = "CosmoMenu";    

  @Override
  public String getFamily(){
      return CosmoMenuComponent.COMPONENT_FAMILY;
  }


  private CosmoMenu theMenu;    

  public CosmoMenu getMenu(){

      Gson gson = new Gson();
      JsonParser jsonParser = new JsonParser();
      CosmoMenuAPI myApi = new CosmoMenuAPI();

      String strMenu = myApi.getMenu();
      JsonElement jEl = jsonParser.parse(strMenu);

      theMenu = gson.fromJson(jEl, CosmoMenu.class);
      return theMenu;      
  }
}

如果您希望您的组件可重用,我鼓励您将所有内容打包在一个独立的 jar 中。如果使用 Servlet 3.0,您将能够轻松访问将它们放入的 Web 资源META-INF/资源。提供罐子面孔配置.xml并且您将使其 JSF 注释可扫描:

components
    \-(Your cource code)
META-INF 
    \-faces-config.xml
    \-resources (This ends up in docroot)
        \-resources
            \-js (Here they go your js files)
            \-comp (Here your composite components)
            \-css (Here your css)

稍后,您必须注意避免组合中的特定 id,因为 JSF 在渲染时会修改它们。最好的方法是将当前组件引用传递给 JS 函数:

<h:inputText styleClass="myInputStyle" onclick="showInputText(this)" />

只需参考包含的 CSS 样式和 JS 函数即可。

最后但并非最不重要的一点是,将 jar 包含为 Web 资源时要小心,如果文件路径与 Web 应用程序中的路径仍然冲突,则不会包含它们。

也可以看看:

  • 在 Web 应用程序中公开 jar 文件中的资源 (Tomcat7)
  • 如何引用 JAR 文件中提供的 JSF 托管 bean?
  • 我怎样才能知道 JSF 组件的 id 以便在 Javascript 中使用
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JSF 最佳实践:自定义组件和 JavaScript 的相关文章

随机推荐

  • 你调用的对象是空的。 [复制]

    这个问题在这里已经有答案了 当我运行该程序时 我不断收到此错误 你调用的对象是空的 描述 执行当前 Web 请求期间发生未处理的异常 请查看堆栈跟踪以获取有关错误及其在代码中的来源的更多信息 异常详细信息 System NullRefere
  • 通过反射区分类属性类型

    我有一个矩形课 public class Rectangle Base IRectangle public IDimension dimension get set public Position position get set publ
  • jest-preset-Angular 不适用于 Angular 13 和 ESM 模块

    我将 ESM 模块与 jest 一起使用 当使用 Angular 12 jest preset Angular 进行编译时 通过在排除列表中列出 igniteui 对我来说非常有用 我升级到 Angular 13 和 jest preset
  • 有没有办法使用渲染器方法添加多个类?

    我正在尝试构建一个看起来相当复杂的桌子 并且我一直在使用 Handsontable 的各种功能 我希望实现的一件事是为单元格分配不同的类以用于样式目的 所以我将渲染器用于各种场景 事情是 当我将新类分配给单元格时 就像第一次渲染它一样 Ex
  • 突出显示工作簿中的重复项

    我正在尝试突出显示 12 张工作簿中的重复项 我们跟踪 ID 如果 ID 值 位于任何其他工作表上 我想突出显示该单元格 当我在 本工作簿 中使用以下代码时 它适用于一张工作表 而不是跨多个工作表 Private Sub Workbook
  • 隐藏日期的默认值

    我的视图模型 public partial class FileTransferFilterCriteriaViewModel public string Fice get set public string SourceEmail get
  • 由于 URI 无效,安装失败

    2013 07 21 11 14 01 AndroidTrial Installation failed due to invalid URI 2013 07 21 11 14 01 AndroidTrial Please check lo
  • 在类库中实例化温莎城堡容器时的最佳实践是什么? [复制]

    这个问题在这里已经有答案了 我想知道实例化温莎城堡容器的最佳位置是在类库中 我应该简单地在我正在使用的类的构造函数中执行此操作 还是有一个我不知道的程序集的单一入口点 Thanks 注入对象图的配置完全取决于实际使用它的应用程序的需求 使用
  • html/CSS 省略号

    我试图让省略号像这样工作 http jsfiddle net 583mK 1 有趣的是 它在 jsFiddle 上运行良好 奇怪的是 给出了完全相同的 HTML CSS 但它在我的应用程序上不起作用 我不明白为什么 是否有任何省略号陷阱可能
  • Highcharts-ng Size 会填充 div 直到检查元素

    我使用 Highcharts NG 将 highcharts 添加到我的 Angular Firebase 应用程序中 并且 highchart 不假设 div 的大小 然而 当我检查元素以便自定义图表大小时 它神奇地假定了 div 大小
  • HTA 和批处理混合,从 BATCH 部分传递变量

    我正在尝试编写一个批处理 hta 混合脚本 该脚本允许我将变量从脚本的批处理部分传递到 hta 部分 这样我就可以生成计算机型号等内容 这是我到目前为止所拥有的 批次
  • 如何选择每组中最常见的文本值?

    我有一个电子表格看起来像这样 Country Choice Brazil Rock Brazil Rock Brazil Paper Peru Scissors Peru Scissors Peru Rock Cuba Paper In t
  • InvalidArgumentError:断言失败:[无法将字节解码为 JPEG、PNG、GIF 或 BMP]

    我有一个文件夹结构 其中每个子文件夹代表一个类 每个类都有一个示例图片 我想将数据加载到 Keras 数据集中 如下所述 https www tensorflow org api docs python tf keras preproces
  • 按键值对 JSON 响应进行排序

    在您将其标记为重复之前 我已经浏览了这些答案 按数组键值对 JSON 进行排序 使用 Javascript 按值对 JSON 数组对象进行排序 我尝试将代码移至我的数据中 但它不起作用 我也尝试过将每个对象项推入数组中 但这不起作用 因为每
  • Django 中的 django.views.generic.list.ListView 和 django.views.generic.ListView 有什么区别?

    In Django教程第四部分 它使用了django views generic ListView 但在基于类的视图 API 参考 the ListView is in django views generic list ListView
  • 无法让 Freeglut 在 Windows 上与 Haskell 配合使用

    这是我正在尝试开始工作的源代码 在 Main hs 中 import Graphics Rendering OpenGL import Graphics UI GLUT import Bindings import Data IORef m
  • 如何在react-router v4中获取查询参数

    我在我的项目中使用react router dom 4 0 0 beta 6 我有如下代码
  • 如何在Lua中匹配一个句子

    我正在尝试创建一个尝试匹配句子的正则表达式 这是一个片段 local utf8 require lua utf8 function matchsent text local text text for sent in utf8 gmatch
  • 具有滚动窗口问题的 Statsmodels OLS

    我想用滚动窗口进行回归 但回归后只得到一个参数 rolling beta sm OLS X2 X1 window type rolling window 30 fit rolling beta params 结果 X1 5 715089 d
  • JSF 最佳实践:自定义组件和 JavaScript

    我正在开发一个 JSF 自定义组件 使用我在以下书中找到的信息Apress 的 Pro JSF 和 HTML5 到目前为止 我成功开发了 java类获取组件中要渲染的数据 java组件类 java渲染器类 标签库文件 呈现 taglib 的