【发布时间】:2017-10-05 20:35:57
【问题描述】:
如果值当前为空或 null,我基本上会显示两个输入字段。如果不是,我会显示一个 outputText。这两个值是存储在 Long 对象中的货币值,我使用转换器正确显示数据(我不能使用 PrimeFaces 的 inputNumber,因为我使用的是 PrimeFaces 5.3)。我的问题如下:
<c:set var="edtVal1" value="#{bean.val1 ne null and bean.val1 ne 0}" scope="request" />
<c:set var="edtVal2" value="#{bean.val2 ne null and bean.val2 ne 0}" scope="request" />
<p:panelGrid>
<p:row>
<p:column colspan="2">
<p:messages id="mainMessages" globalOnly="false" autoUpdate="true" showDetail="true" />
</p:column>
</p:row>
<!-- [...] -->
<p:row>
<p:column styleClass="col-quarter col-label2">
<h:outputText value="value 1" />
</p:column>
<p:column styleClass="col-quarter col-value2" rendered="#{edtVal1}">
<h:outputText id="val1Output" value="#{bean.val1}" converter="myConverter" />
</p:column>
<p:column styleClass="col-quarter" rendered="#{not edtVal1}">
<p:inputText id="val1Input" value="#{bean.val1}" converter="myConverter">
<p:ajax update="mainMessages val1Input" event="change" />
</p:inputText>
</p:column>
</p:row>
<p:row>
<p:column styleClass="col-quarter col-label2">
<h:outputText value="value 2" />
</p:column>
<p:column styleClass="col-quarter col-value2" rendered="#{edtVal2}">
<h:outputText id="val1Output" value="#{bean.val2}" converter="myConverter" />
</p:column>
<p:column styleClass="col-quarter" rendered="#{not edtVal2}">
<p:inputText id="val1Input" value="#{bean.val2}" converter="myConverter">
<p:ajax update="mainMessages val1Input" event="change" />
</p:inputText>
</p:column>
</p:row>
</p:panelGrid>
当我这样说时,转换器抛出的消息被显示,但没有任何字段被更新。但是,如果我对两个输入/输出选项使用相同的布尔变量(将第一个数据行的rendered 属性中使用的变量更改为在两者中都使用edtVal2),如下所示:
<p:row>
<p:column styleClass="col-quarter col-label2">
<h:outputText value="value 1" />
</p:column>
<p:column styleClass="col-quarter col-value2" rendered="#{edtVal1}">
<h:outputText id="val1Output" value="#{bean.val1}" converter="myConverter" />
</p:column>
<p:column styleClass="col-quarter" rendered="#{not edtVal1}">
<p:inputText id="val1Input" value="#{bean.val1}" converter="myConverter">
<p:ajax update="mainMessages val1Input" event="change" />
</p:inputText>
</p:column>
</p:row>
第一个字段更新成功,第二个字段仍然无效。
使用转换器显示格式化数据是我已经完成的一种解决方法,它可以按预期工作,并且我使用与以前相同的转换器。但这一次,我不明白为什么它不起作用。
转换器对于重现问题很重要,但任何自定义转换器似乎都可以完成这项工作。
【问题讨论】:
-
你应该认真改进你的标题...阅读How to Ask,它包含关于如何写一个好的标题的建议。并阅读minimal reproducible example 和stackoverflow.com/tags/jsf/info
-
我同意这个问题很长,但它是最小的:我的问题有一个模糊的原因,我试图解决它 2 小时。我认为这个问题不值得一票否决,尤其是在我努力尽可能准确地提出问题的情况下。
-
但是,您仍然应该添加一些文本来解释第一个和第二个“panelgrid”之间的区别。现在取决于愿意帮助找到差异的人,而不是minimal reproducible example ;-)
-
我是否需要删除转换器代码才能最小化?
-
如果您不需要转换器有同样的问题,您可以将其删除。但它也需要是完整的、可验证的……创建一个空的jsf项目。复制/粘贴您在上面发布的内容。它运行吗?另请阅读stackoverflow.com/tags/jsf/info
标签: jsf primefaces xhtml converter