0

valuechangelistener メソッドが期待どおりに呼び出されません。ah:selectOneRadio コンポーネント (以下) があり、追加ボタンをクリックすると valueChangeListener が呼び出されることを期待していますが、add メソッドのみが呼び出され、setSelectedItem メソッドは完全に無視されます。私は何が欠けていますか?javascript dataTableSelectOneRadio が正常に実行されていることに注意してください。

ここに.xhtmlがあります

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 です。

@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);
}
4

1 に答える 1

0

bindingビュー スコープ Bean は、コンポーネントをビュー スコープ Bean のプロパティにバインドするときに、RESTORE_VIEW フェーズごとに再作成されます。これはJSF 問題 1492として知られており、今後の JSF 2.2 で修正されます。

この特定のケースでは、EL コンテキストからbinding="#{AddEntryMB.dataTable}"現在のものを削除して取得することをお勧めします。var="c"

public void setSelectedItem(ValueChangeEvent event) {
    FacesContext context = FacesContext.getCurrentInstance();
    DefaultScheduleEntry c = context.getApplication().evaluateExpressionGet(context, "#{c}", DefaultScheduleEntry.class);
    // ...
}
于 2012-09-15T13:14:22.987 に答える