私はJSFの動作と混同していますので、ここにMCVEを投稿してください。 私がいるindex.xhtml持っている:Primefaces selectBooleanCheckbox値がAjaxアクションで失われました
<h:form id="entityForm" enctype="multipart/form-data" styleClass="entityForm">
<p:dataTable id="dataTableId1" value="#{testBean.testEntityList}" var="tent" rowKey="#{tent.id}">
<p:column style="width:16px">
<p:rowToggler/>
</p:column>
<p:column>
<h:outputText value="#{tent.id}"/>
</p:column>
<p:column>
<h:outputText value="#{tent.name}"/>
</p:column>
<p:rowExpansion>
<p:selectBooleanCheckbox value="#{tent.something}"/>
<p:inputText value="#{tent.strNextToSomethingCheckBox}" />
</p:rowExpansion>
</p:dataTable>
<p:commandButton id="button1" ajax="true" value="Do something" update="entityForm"/>
</h:form>
Beanコード:
@ManagedBean(name = "testBean")
@ViewScoped
public class TestBean implements Serializable {
private static final Logger LOG = Logger.getLogger(TestBean.class);
private List<TestEntity> testEntityList;
@PostConstruct
public void init() {
LOG.debug("init call");
testEntityList = new ArrayList<>();
testEntityList.add(new TestEntity(1L, "Entry 1", true, "Value 1 str"));
testEntityList.add(new TestEntity(2L, "Entry 2", false, "Value 2 str"));
testEntityList.add(new TestEntity(3L, "Entry 3", false, "Value 3 str"));
}
public class TestEntity {
Long id;
String name;
Boolean something;
String strNextToSomethingCheckBox;
public TestEntity(Long id, String name, Boolean something, String strNextToSomethingCheckBox) {
this.id = id;
this.name = name;
this.something = something;
this.strNextToSomethingCheckBox = strNextToSomethingCheckBox;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Boolean getSomething() {
return something;
}
public void setSomething(Boolean something) {
LOG.debug("setSomething call");
this.something = something;
}
public String getStrNextToSomethingCheckBox() {
return strNextToSomethingCheckBox;
}
public void setStrNextToSomethingCheckBox(String strNextToSomethingCheckBox) {
LOG.debug("setStrNextToSomethingCheckBox call");
this.strNextToSomethingCheckBox = strNextToSomethingCheckBox;
}
}
public List<TestEntity> getTestEntityList() {
return testEntityList;
}
public void setTestEntityList(List<TestEntity> testEntityList) {
this.testEntityList = testEntityList;
}
}
シナリオ:あなたが開いているページ、あなたがボタンを押すと、フォームがあり、確認として、あなたは、チェックボックスの状態が表示されます、最初の行を拡大します更新されたチェックボックスはチェックされています(それを見るには再度行を展開する必要があります)
問題のシナリオ:開いているページ、開いているページ、行を展開しない、ボタンをクリックする、フォームが更新された後、値は真から偽に設定されます
質問:値がtrueからfalseに設定されるのはなぜですか?このバグや予想される動作ですか?どうすればこの問題を回避できますか?おかげさまで あなたはSelectBooleanCheckboxRenderer#decode
コードの下にprimefacesを参照することができます
'h:form'から' enctype = "multipart/form-data" 'を削除するとどうなりますか? – Kukeltje
@Kukeltjeと同じ値が失われ/ falseにリセットされます – jNick