Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xpages 根据用户输入有条件地启用自定义转换器_Xpages - Fatal编程技术网

Xpages 根据用户输入有条件地启用自定义转换器

Xpages 根据用户输入有条件地启用自定义转换器,xpages,Xpages,我想有条件地运行自定义转换器。我有一个XPages,可以在同一页面上处理编辑和新数据。用户选择了单选按钮来编辑或创建新项目 输入字段在这两个函数之间共享。页面加载时,我不知道用户将做什么,因此我无法使用转换器的“Loaded”属性 我需要将数据格式化为“900000美元”格式。请注意,在我要求的格式中没有美分 内置的数字或货币转换器使我失败,因为无论我做什么,它总是添加美分。我假设这是XPages中的一个bug。如果我说“仅限整数”或将最大分数位数设置为零,这并不重要。分毫不会消失 我有一个自定

我想有条件地运行自定义转换器。我有一个XPages,可以在同一页面上处理编辑和新数据。用户选择了单选按钮来编辑或创建新项目

输入字段在这两个函数之间共享。页面加载时,我不知道用户将做什么,因此我无法使用转换器的“Loaded”属性

我需要将数据格式化为“900000美元”格式。请注意,在我要求的格式中没有美分

内置的数字或货币转换器使我失败,因为无论我做什么,它总是添加美分。我假设这是XPages中的一个bug。如果我说“仅限整数”或将最大分数位数设置为零,这并不重要。分毫不会消失

我有一个自定义转换器,对我来说可以正常工作,但只在重新计算一次时工作,而在重新计算时失败。我已经尝试将部分刷新更新设置为“不验证或更新数据”,这可以工作,但会破坏页面中需要启用更新的其他部分

这个应用程序很快就要部署了,现在对我来说重新设计整个页面结构来解决这个问题已经太迟了——移动的部分太多了。我所需要做的就是让测试人员满意,去掉增加到值中的美分(xxxx.00),并让其他一切都正常工作

我的问题是单一的,但我的问题是三重的。我怎样才能:

  • 让内置的货币转换器以应有的方式删除美分?或
  • 是否仅根据用户输入的值启用自定义转换器?或
  • 帮我想一个不同的方法来解决这个问题

史蒂夫,我确实与转换器打过一场仗,因为另一个问题是,它们都是在验证之前运行的,因此错误消息不一定按顺序显示

因此,我最终使用了验证器(也用于转换器的工作)。除此之外,我还使用组件(而不是值)的“绑定”轻松访问同一页面上的其他字段。这允许条件检查/逻辑。如果您尚未尝试组件绑定,则会出现错误


/John

Steve,我确实与转换器打过一场仗,因为另一个问题是它们都是在验证之前运行的,因此错误消息不一定按顺序显示

因此,我最终使用了验证器(也用于转换器的工作)。除此之外,我还使用组件(而不是值)的“绑定”轻松访问同一页面上的其他字段。这允许条件检查/逻辑。如果您尚未尝试组件绑定,则会出现错误


/John

实现这一点的两种方法之一是在自定义转换器中对用户进行有条件的检查。另一种方法是使用PhaseListener,在RenderResponse阶段获取组件,并在组件不需要时将组件上的转换器设置为null。我通常不使用转换器,但如果它只是数字的显示,如果我真的需要转换值。我会使用类似于显示掩码的东西,我最近使用了一个名为jquery的插件,它可以很好地解决类似的问题。

有两种方法可以做到这一点,一种是在自定义转换器中有条件地检查用户。另一种方法是使用PhaseListener,在RenderResponse阶段获取组件,并在组件不需要时将组件上的转换器设置为null。我通常不使用转换器,但如果它只是数字的显示,如果我真的需要转换值。我会使用类似于显示掩码的东西,我最近使用了一个名为jquery的插件,该插件对类似的问题很有效。

我假设您的转换器位于一个可编辑字段上,否则它在提交数据时不会失败

问题似乎在于时机。转换器必须在页面加载期间运行,以便将数据库中存储的数值转换为浏览器所需的字符串值。所以需要设置一些默认值,大概是连接它

如果您希望根据输入更改显示选项,则必须在输入后进行部分刷新,以便重新计算是否应显示美分

一旦输入的值从浏览器传回基础组件树,您就可以进行相应的计算——前提是您的转换器知道要与什么交互。部分刷新的过程是恢复组件树,应用请求值(将浏览器中的字符串值存储到每个组件的submittedValue属性中),处理任何转换器或验证器,然后更新组件树。因此,当转换器运行时,单选按钮的value属性未设置,因此它在上次刷新的设置(默认设置)下工作

如果选择“不验证或更新数据”,则表示不必麻烦将任何输入的条目从浏览器写回组件树。所以我相信你可以,这意味着转换器对输入的内容一无所知

John关于绑定的建议很好,但请记住,您需要相关组件的submittedValue属性。对于单选按钮,我不是100%确定会是什么,但您应该能够打印出来

掩模方法可能有效。最近有人用它使整数正确工作


另一个选项是查看扩展库的Dojo数字验证文本框,它有一个javaType属性和一组更灵活的转换器。这可能会让你避免分钱。如果确实如此,而您不想要Dojo的外观和感觉,那么它的转换器应该给出一些想法,说明您的转换器需要执行哪些操作才能删除美分。

我假设您的转换器位于可编辑字段上,否则它将不会