如何在 JSF 中显示我的应用程序的错误?

2023-12-31

在我的 JSF/Facelets 应用程序中,这是我的表单的一部分的简化版本:

<h:form id="myform">
  <h:inputSecret value="#{createNewPassword.newPassword1}" id="newPassword1" />
  <h:message class="error" for="newPassword1" />
  <h:inputSecret value="#{createNewPassword.newPassword2}" id="newPassword2" />
  <h:message class="error" for="newPassword2" />
  <h:commandButton value="Continue" action="#{createNewPassword.continueButton}" />
</h:form>

我希望能够根据 continueButton() 方法中发生的情况将错误分配给特定的 h:message 标记。 newPassword 和 newPassword2 需要显示不同的错误。验证器不会真正起作用,因为将传递结果(来自数据库)的方法是在 continueButton() 方法中运行的,并且运行两次的成本太高。

我无法使用 h:messages 标记,因为页面有多个位置需要显示不同的错误消息。当我尝试此操作时,页面显示每条消息的重复项。

我尝试将此作为最佳猜测,但没有运气:

public Navigation continueButton() {
  ...
  expensiveMethod();
  if(...) {
    FacesContext.getCurrentInstance().addMessage("newPassword", new FacesMessage("Error: Your password is NOT strong enough."));
  }
}

我缺少什么?任何帮助,将不胜感激!


FacesContext.addMessage(字符串,FacesMessage) http://java.sun.com/javaee/javaserverfaces/1.1_01/docs/api/javax/faces/context/FacesContext.html#addMessage(java.lang.String,%20javax.faces.application.FacesMessage)需要组件的clientId, not it's id。如果您想知道为什么,请考虑将一个控件作为数据表的子项,为每行使用相同的控件标记出不同的值 - 可能会为每行打印不同的消息。这id总是一样的;这clientId每行都是唯一的。

因此“myform:mybutton”是正确的值,但对其进行硬编码是不明智的。查找将减少视图和业务逻辑之间的耦合,并且是一种适用于 portlet 等限制性更强的环境的方法。

<f:view>
  <h:form>
    <h:commandButton id="mybutton" value="click"
      binding="#{showMessageAction.mybutton}"
      action="#{showMessageAction.validatePassword}" />
    <h:message for="mybutton" />
  </h:form>
</f:view>

托管bean逻辑:

/** Must be request scope for binding */
public class ShowMessageAction {

    private UIComponent mybutton;

    private boolean isOK = false;

    public String validatePassword() {
        if (isOK) {
            return "ok";
        }
        else {
            // invalid
            FacesMessage message = new FacesMessage("Invalid password length");
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage(mybutton.getClientId(context), message);
        }
        return null;
    }

    public void setMybutton(UIComponent mybutton) {
        this.mybutton = mybutton;
    }

    public UIComponent getMybutton() {
        return mybutton;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 JSF 中显示我的应用程序的错误? 的相关文章

随机推荐

  • Scipy 中使用 NaN 值进行 T 检验

    我在 scipy 中进行 t 检验时遇到问题 这让我慢慢发疯 它应该很容易解决 但我所做的一切都不起作用 并且通过广泛的搜索也找不到解决方案 我在最新的 Anaconda 发行版上使用 Spyder 具体来说 我想比较从 csv 文件导入的
  • 在 C 中的循环/IF 结构之外声明变量

    我是 C 语言新手 总体来说是编程新手 我想知道为什么当我在结构外部的 if 语句中声明要使用的变量时 我收到的输出不正确 无论如何对于这段代码 这是我的代码 include
  • 从 URL 下载图像并将其保存到内部存储器的最佳方法

    我正在开发一个应用程序 我想从 URL 下载图像 我需要立即下载这些图像并将其存储到内部存储器中 有超过200张图片可供下载 请告诉我在尽可能短的时间内下载这些图像的最佳方法 如果有任何第三方库可用 请告知 考虑使用毕加索来达到您的目的 我
  • C# 线程对象生命周期

    假设我有一段代码如下 int Main if true new Thread gt doSomeLengthyOperation Start while true do nothing 有 2 个线程 我将把正在执行 Main 函数的线程称
  • Docker 在构建镜像时无法删除文件

    我的 DockerFile 包含以下指令 rm f plugins 7z 此命令在早期版本的 docker 中按预期工作 但在版本 1 13 中失败 我看到错误 cannot access plugins 7z No such file o
  • ASP.NET MVC 区域内样式表中的相对路径

    我有一个当前结构的项目 My Project Content Controller View Model Areas Area1 View Controller Model Area2 View Controller Model 所有区域视
  • 了解 Prolog 列表

    我试图理解 Prolog 列表 以及如何在递归函数末尾 返回 实例化值 我正在看这个简单的例子 val and remainder X X Xs Xs val and remainder X Y Ys Y R val and remaind
  • 如何仅恢复 SVN 工作副本中的目录?

    我想恢复一个目录及所有子目录在 SVN 工作副本中 因此它们与存储库匹配 但我不想碰任何文件在这些目录中 我的一个 SVN 应用程序在工作副本中的每个目录上递归地设置 SVN 属性 但我想恢复这些更改以阻止它突出显示它们并尝试将更改提交到
  • 有没有办法获取装饰器包装的函数?

    假设我有 someDecorator def func this function does something print 1 现在 对象func是一个实例someDecorator 有什么方法可以访问它所拥有的功能 即类似的东西func
  • 如何将列表转换为JavaRDD

    我们知道spark中有一个方法rdd collect 它可以将RDD转换为列表 List
  • Angular JS 中的条件 ng 模式

    有没有办法在 AngularJS 中实现条件 ng pattern ng pattern myForm exipration dirty d 2 d 4 我像上面那样尝试过 但没有帮助 Markup
  • 如何在某个索引处用不同颜色标记水平进度条,就像Android中的Youtube视频黄色广告标记一样

    在我当前的应用程序中 需要创建自定义视频播放器 特殊要求是在某个给定的时间索引显示或标记不同颜色的视频进度条 就像 Youtube 用黄色标记其视频以指示其视频上的广告一样进度条 为了更清楚 请检查下面的屏幕截图 此时 我已经使用 Vide
  • R 中数据帧的条件和

    我想组合数据帧并根据其中一个数据帧的值有条件地计算它们的总和 对于下面的示例 如果单元格位于df4不是 0 也不是 NA 总和应该是df3 df4否则总和应该是df1 df2 df3 gt df1 1 2 3 A 0 3 2 B 1 1 0
  • 解析推送 - 如何在 Android 上接收推送时自动打开活动,无需用户操作

    我有一个要求 android 当收到推送通知时 我的应用程序应该自动运行其主要活动 而无需用户单击系统托盘中的通知 我有一张显示当前位置的地图 但在推送中 我将收到一个位置 并且我需要在主要活动中使用我的地图在接收推送时将相机移动到当前接收
  • 从 python 中的 stdin 读取时管道文件描述符错误

    重复的this https stackoverflow com questions 466801 python piping on windows why does this not work问题 投票结束 在 Windows 命令行中考虑
  • Django Rest Framework - 未提供身份验证凭据

    我正在使用 Django Rest Framework 开发一个 API 我正在尝试列出或创建一个 订单 对象 但是当我尝试访问控制台时出现以下错误 detail Authentication credentials were not pr
  • 获取最高分配的文件描述符

    是否有一种可移植的方法 POSIX 来获取当前进程的最高分配文件描述符编号 例如 我知道有一种很好的方法可以获取 AIX 上的号码 但我正在寻找一种可移植的方法 我问的原因是我想关闭所有打开的文件描述符 我的程序是一个以 root 身份运行
  • 在 xib 的自定义单元上设置 IBAction?

    我在 xib 中创建了一个自定义单元格 在 iOS 6 中使用 Storyboard 但为单元格创建了单独的 xib 现在我尝试将扬声器按钮连接到 UITableViewController 子类中的 IBAction 我在 viewDid
  • .NET C#:如何在 AJAX 调用期间处理表单身份验证过期

    对于上下文 我在 web config 中设置了表单身份验证超时值 并且正在使用 ASP NET MVC 1 我认为将我的问题表述为 2 个用例可能是最简单的 第一个用例是在没有身份验证的情况下发生的情况超时 第二个是身份验证超时会发生什么
  • 如何在 JSF 中显示我的应用程序的错误?

    在我的 JSF Facelets 应用程序中 这是我的表单的一部分的简化版本