JSF2.3:ui:将多个p:列包含到两个不同的复合组件中,导致Stackoverflow

时间:2017-11-17 08:09:12

标签: jsf primefaces datatable mojarra jsf-2.3

Java版本:1.8.0_102; Mojarra:2.3.0; Primefaces:6.1.RC2(社区版);

当你能真正在Stackoverflow上引用“StackOverflow”时,它总是很好。

我还没有把它作为一个专门的测试用例,并且XHTML / JSF代码太复杂了,无法在这里复制(这是我使用ui:include的原因)但我至少可以描述它以便如果其他人遇到同样奇怪的问题,他们知道在哪里看。

我有两个复合组件,我们称之为A和B.

它们都涉及非常大的复杂p:dataTable,但略有不同,但却分享了p:column的许多内容。因此,为了不要重复自己(DRY)编码,我使用了多个ui:include的{​​{1}}到两个独立的CC,A和B中。

这个工作正常几天。我一直在处理相互包含的部分,引入新的p:column列,然后突然开始得到StackOverflowError错误:

p:column

我挠头(但还不够秃头)寻找可能是什么原因,并说服自己没有什么会导致递归。

然后我想简单地评论来自"客户"的java.lang.StackOverflowError at com.sun.el.lang.EvaluationContext.getContext(EvaluationContext.java:91) at com.sun.faces.el.ImplicitObjectELResolver.getValue(ImplicitObjectELResolver.java:110) at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:180) at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:208) at com.sun.el.parser.AstIdentifier.getValue(AstIdentifier.java:116) at com.sun.el.parser.AstValue.getBase(AstValue.java:151) at com.sun.el.parser.AstValue.getValue(AstValue.java:200) at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:226) at org.jboss.weld.el.WeldValueExpression.getValue(WeldValueExpression.java:50) at com.sun.faces.facelets.el.ContextualCompositeValueExpression.getValue(ContextualCompositeValueExpression.java:159) at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:115) at javax.faces.component.UIComponentBase$AttributesMap.get(UIComponentBase.java:2487) at com.sun.faces.el.CompositeComponentAttributesELResolver$ExpressionEvalMap.get(CompositeComponentAttributesELResolver.java:405) at javax.el.MapELResolver.getValue(MapELResolver.java:199) at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:180) at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:208) at com.sun.el.parser.AstValue.getValue(AstValue.java:140) at com.sun.el.parser.AstValue.getValue(AstValue.java:204) at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:226) at org.jboss.weld.el.WeldValueExpression.getValue(WeldValueExpression.java:50) at com.sun.faces.facelets.el.ContextualCompositeValueExpression.getValue(ContextualCompositeValueExpression.java:159) at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:115) at javax.faces.component.UIComponentBase$AttributesMap.get(UIComponentBase.java:2487) at com.sun.faces.el.CompositeComponentAttributesELResolver$ExpressionEvalMap.get(CompositeComponentAttributesELResolver.java:405) at javax.el.MapELResolver.getValue(MapELResolver.java:199) at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:180) at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:208) at com.sun.el.parser.AstValue.getValue(AstValue.java:140) at com.sun.el.parser.AstValue.getValue(AstValue.java:204) 。 CC,A和B,并将复杂的多列ui:include代码粘贴回A,这一切都运行良好。然后我将它粘贴到B中,它仍然可以正常工作。

它是可重复的。关于在多个p:column中使用ui:include的事情正在抛出它,我还不知道是什么(罪魁祸首包括代码对我来说看起来无辜,但正如所说的那样,太复杂了,无法在此处显示)

一个哭泣的耻辱,因为p:column包含的代码非常复杂,并且在两个不同的CC上下文中再现/编辑/管理它是非常糟糕和可怕的WET(写一切两次,又名我们喜欢打字)。< / p> 第一季度:任何人都可以想到任何可能导致这种情况的事情吗?

Q2:无论如何只是将ui:include中多列的p:column方面封装为复合组件?

如果有人能在没有一些棘手的测试的情况下回答Q1,我会感到惊讶。这是一种病态的问题。

如果有解决方案,我会非常惊讶。

将尝试将其作为测试用例进行隔离,但目前问题仍然如上所述。

0 个答案:

没有答案