首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >提交时未调用ValueChangeListener

提交时未调用ValueChangeListener
EN

Stack Overflow用户
提问于 2012-09-15 07:38:32
回答 1查看 320关注 0票数 0

我的valuechangelistener方法没有像我预期的那样被调用。我有一个h:selectOneRadio组件(如下所示),我希望在单击add按钮时调用valueChangeListener,但只有add方法被调用,而setSelectedItem方法被完全忽略。我遗漏了什么?注意,javascript dataTableSelectOneRadio执行得很好。

这是.xhtml

代码语言:javascript
复制
h:panelGrid
Select Client to Associate with Appointment
<h:dataTable id="addClient" styleClass="dataTable"
   value="#{AddEntryMB.clientValues}" var="c" binding="#{AddEntryMB.dataTable}" >

<h:column>
    <f:facet name="header">Select</f:facet>
        <h:selectOneRadio valueChangeListener="#{AddEntryMB.setSelectedItem}" 
               immediate="true" onchange="dataTableSelectOneRadio(this);">
                    <f:selectItem itemValue="null" />
            </h:selectOneRadio>
</h:column>

<h:column>
   <f:facet name="header">Last Name</f:facet>
    #{c.lastName}
</h:column>

</h:dataTable>
</h:panelGrid>

<h:panelGroup>
    <h:commandButton action="#{AddEntryMB.add}" value="add" />
    <h:commandButton action="cancel" value="cancel" immediate="true"/>
</h:panelGroup>

这是支持的bean。

代码语言:javascript
复制
@ManagedBean(name="AddEntryMB")
@ViewScoped
public class AddEntryMB implements Serializable {
private int  rowIndex;
private int idValue;
    private transient HtmlDataTable dataTable;

 public void setSelectedItem(ValueChangeEvent event) {

    rowIndex = dataTable.getRowIndex();

}

public void add()
{
    DefaultScheduleEntry entry = new DefaultScheduleEntry();
    entry.setId(RandomStringUtils.randomNumeric(32));
    entry.setStartTime(from);
    entry.setEndTime(until);
    entry.setTitle(title);
    entry.setSubtitle(location);
    entry.setDescription(comments);
}
EN

回答 1

Stack Overflow用户

发布于 2012-09-15 21:14:23

当您通过binding将组件绑定到视图作用域bean的属性时,视图作用域bean将在每个RESTORE_VIEW阶段重新创建。这就是所谓的JSF issue 1492,并在即将发布的JSF2.2中进行了修复。

在这种情况下,您最好从EL上下文中删除binding="#{AddEntryMB.dataTable}"并获取当前的var="c"

代码语言:javascript
复制
public void setSelectedItem(ValueChangeEvent event) {
    FacesContext context = FacesContext.getCurrentInstance();
    DefaultScheduleEntry c = context.getApplication().evaluateExpressionGet(context, "#{c}", DefaultScheduleEntry.class);
    // ...
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12433288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档