JSF Ajax只是第一次打电话

时间:2017-05-13 17:14:03

标签: jsf-2

在JSF2中,我有一个像这样的XHTML:

date, dim, factor, sum_value
2017-01-01, dim1, A, [value_A]
2017-01-01, dim1, B, [value_B]
2017-01-01, dim2, C, [value_C]
2017-01-01, dim2, D, [value_D]
2017-01-01, dim3, E, [value_E]
2017-01-01, dim3, F, [value_F]

我的托管bean有:

<h:form id="myForm">
...
    <c:forEach items="#{myController.header}" var="hd" varStatus="count">
         #{hd}
         <h:selectOneMenu value="#{myController.type[count.index]}" id="formtype" >
                 <f:selectItem itemValue="Nop" itemLabel="Nop" />
                 <f:selectItem itemValue="Yep" itemLabel="Yep" />
                 <f:ajax render="@form" />
          </h:selectOneMenu>
          #{myController.type[count.index]}
          <h:selectBooleanCheckbox value="#myController.valid[count.index]}" id="valid">
                 <f:ajax render="@form"/>
          </h:selectBooleanCheckbox> 
          #{myController.valid[count.index]}
     </c:forEach>
...
</h:form>
当第一次加载命名bean时,我初始化(private String[] type; private boolean[] valid; 并为每个位置赋值)

如果我修改了组合或复选框,它可以,则在托管bean中更改该值,并在JSF页面中打印(呈现)新值。但只是第一次。接下来的更改根本不会修改任何内容。这很奇怪,因为我在其他应用程序中有类似的代码并且工作正常,所以我做错了但却找不到它。我的模板有type = new String[...];,我在JS控制台或TomEE中看不到任何日志(我只看到。h:header,但我认为它是无关的)。我试图添加INFO - The start() method was called on component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/myApp]] after start() had already been called. The second call will be ignored / execute="@this"和其他人失败,并检查this post的所有点,但似乎没有任何内容适用于我。

我没有看到什么错误?

修改

execute="@form"

我的模板中也有@Named(value = "myController") @ViewScoped public class MyController implements Serializable { ...

2 个答案:

答案 0 :(得分:1)

我想我终于明白了!

感谢两件事:

  1. BalusC answer中的第3点。我在模板<h:messages id="msg"中为我的邮件添加了一个ID,然后使用<f:ajax render="@form msg"....。这样会显示错误j_idt1: Validation Error: Value is required

  2. 然后我可以在this post中找到解决方案:将所需参数从true更改为<f:viewParam required="#{!facesContext.postback}"。这在我的其他应用程序中不是必需的,因为必需“假”,因为它可以使用参数调用或不使用它。当使用参数调用它时,它起作用,因为在没有它的情况下可以调用页面。

答案 1 :(得分:0)

遇到完全相同的问题,我的<f:ajax>标签会第一次运行,然后什么都没有......没有错误或页面上的任何内容。几个小时后,无数的谷歌搜索都没有出现。 (StackOverflow上的大多数问题实际上都存在相反的问题,Ajax第一次不会触发但是它会正常工作)。我终于偶然发现了这个问题,这个问题正是我所看到的。

我之前尝试仅重新渲染页面的一部分,但我注意到,一旦我将render属性更改为"@all",我就会收到上述相同的错误消息:

j_idt1: Validation Error: Value is required

我向上滚动,发现我的<f:viewParam>已设置为"true"。我做了user1156544描述的更改并且做了诀窍。