我有一個jsf頁面,其中包含一個selectmanylistbox,其值是由我管理的函數提供的對象數組。這些目的是根據下面的簡單類:jsf提交表單無效的值
public class Category {
private String categoryId;
private String categoryName;
private String[] templates;
public Category(String categoryId, String categoryName) {
this.categoryId = categoryId;
this.categoryName = categoryName;
}
public Category(String categoryId, String categoryName, String[] templates) {
this.categoryId = categoryId;
this.categoryName = categoryName;
this.templates = templates;
}
public String getCategoryId() {
return categoryId;
}
public void setCategoryId(String categoryId) {
this.categoryId = categoryId;
}
public String getCategoryName() {
return categoryName;
}
public void setCategoryName(String categoryName) {
this.categoryName = categoryName;
}
public String[] getTemplates() {
return templates;
}
public void setTemplates(String[] templates) {
this.templates = templates;
}
這裏是託管bean函數提供所述陣列,用於selectonelistbox:
public Category[] getCategoryValues() {
categoryValues = new Category[4];
String[] temp = new String[3];
temp[0] = "Line 1";
temp[1] = "Line 2";
temp[2] = "Line 3";
categoryValues[0] = new Category("1001", "Category 1", temp);
temp = new String[3];
temp[0] = "Line 4";
temp[1] = "Line 5";
temp[2] = "Line 6";
categoryValues[1] = new Category("1002", "Category 2", temp);
temp = new String[3];
temp[0] = "Line 7";
temp[1] = "Line 8";
temp[2] = "Line 9";
categoryValues[2] = new Category("1003", "Category 3", temp);
temp = new String[3];
temp[0] = "Line 10";
temp[1] = "Line 11";
temp[2] = "Line 12";
categoryValues[3] = new Category("1004", "Category 4", temp);
return categoryValues;
}
下面是該selectmanylistbox JSF的代碼:
<h:selectOneListbox value="#{category.selectedCategoryId}"
onchange="submit()">
<f:selectItems value="#{category.categoryValues}" var="cat"
itemLabel="#{cat.categoryName}" itemValue="#{cat.categoryId}" />
</h:selectOneListbox>
此外,我使用以下事件來重新加載頁面,只要選擇一個類別:
<f:event listener="#{category.intialize()}" type="preRenderView" />
重新載入頁面的目的是使用selectedcategory作爲selectmanycheckbox項目的基礎,顯示selectedcategory中的數組作爲複選框。這裏是相應的jsf代碼:
<h:selectManyCheckbox value="#{category.targetTemplates}">
<f:selectItems value="#{category.selectedCategoryTemplates}" />
</h:selectManyCheckbox>
其中CategoryTemplates是simplay一個字符串對象的數組。
現在,類別選擇和頁面重新載入工作正常,並且selectmanycheckbox項目正確顯示,並且所選類別中的字符串作爲選項正確顯示。當我嘗試選擇一些複選框值並提交它們時,我收到了一個inavlid值錯誤消息,並且沒有提交完成。 selectmanycheckbox使用的值在頁面加載時可用,那麼可能是什麼問題?
下面是實際無爲initialize()方法,我只是用它來重新加載頁面的目的:
public void intialize() {
}
下面是複選框的HTML代碼:
<table>
<tr>
<td>
<input name="j_idt4:j_idt8" id="j_idt4:j_idt8:0" value="Line 1" type="checkbox" /><label
for="j_idt4:j_idt8:0" class=""> Line 1</label></td>
<td>
<input name="j_idt4:j_idt8" id="j_idt4:j_idt8:1" value="Line 2" type="checkbox" /><label
for="j_idt4:j_idt8:1" class=""> Line 2</label></td>
<td>
<input name="j_idt4:j_idt8" id="j_idt4:j_idt8:2" value="Line 3" type="checkbox" /><label
for="j_idt4:j_idt8:2" class=""> Line 3</label></td>
</tr>
</table>
在控制檯上實際的錯誤信息是:
j_idt4:j_idt8:Überprüfungsfehler:WERT ISTungültig),細節=(j_idt4:j_idt8:Überprüfungsfehler:WERT ISTù ngültig。)]
及其在德國和意味着驗證失敗,值無效
請顯示錯誤消息和category.intialize()方法。看起來preRenderView在最終的POST後被再次調用,從而改變了值。根據用戶選擇更新部分輸出的要求更好地使用ajax處理... – Yamada 2014-09-12 15:35:07
我已編輯帖子,添加了導致錯誤的HTML代碼以及錯誤消息(其德文版本)。我也考慮過Ajax,但由於項目需求而無法使用 – user1107888 2014-09-12 15:43:55
您對initialize()函數是正確的,它在提交時也會被調用。 – user1107888 2014-09-12 15:47:38