Jsf h:选择多个复选框转换器';s getAsObject始终检索“0”;关于;作为提交值
我有一颗豆子:Jsf h:选择多个复选框转换器';s getAsObject始终检索“0”;关于;作为提交值,jsf,converter,selectmanycheckbox,Jsf,Converter,Selectmanycheckbox,我有一颗豆子: @ManagedBean(name = "bExam") @SessionScoped public class BExam implements Serializable { private List<Category> categories; private List<Category> categoriesSelected; public BExam() { categories = CategoryDb.
@ManagedBean(name = "bExam")
@SessionScoped
public class BExam implements Serializable
{
private List<Category> categories;
private List<Category> categoriesSelected;
public BExam() {
categories = CategoryDb.getAll(); // there is ok. Categories has filled right.
categoriesSelected = new ArrayList<>();
getters & setters...
}
复选框是正确的。当我单击其中任何一个参数时,在getAsObject
的string
参数中,我总是在“上获得”。
那里发生了什么事?为什么这根绳子正好来了?如何解决
当我单击其中任何一个时,在字符串参数中的getAsObject
这是无值复选框的浏览器默认值。当HTML
没有值
属性或属性为空时,将使用此选项
默认情况下,JSF在那里呈现getAsString()
值。因此,当实际转换器返回null
或getAsString()
中的空字符串时,可能会发生这种情况。当与
关联的(默认)HTML呈现程序
以不正确的方式被覆盖,或者甚至被损坏时(例如,与
关联的默认HTML呈现程序
以某种方式被使用),也会发生这种情况
问题的原因在目前提供的信息中不可见,但您的第一步是在转换器的getAsString()
中放置调试断点,并探索渲染器调用它的调用堆栈,并检查转换器返回的值
当我单击其中任何一个时,在字符串参数中的getAsObject
这是无值复选框的浏览器默认值。当HTML
没有值
属性或属性为空时,将使用此选项
默认情况下,JSF在那里呈现getAsString()
值。因此,当实际转换器返回null
或getAsString()
中的空字符串时,可能会发生这种情况。当与
关联的(默认)HTML呈现程序
以不正确的方式被覆盖,或者甚至被损坏时(例如,与
关联的默认HTML呈现程序
以某种方式被使用),也会发生这种情况
问题的原因在目前提供的信息中不可见,但第一步是在转换器的getAsString()
中放置调试断点,并探索渲染器调用它的调用堆栈,并检查转换器返回的值。复选框的value
属性为空..我不明白为什么。。类别在每个属性中都有数据。复选框的value
属性为空..我不明白为什么。。类别在每个属性中都有数据。我确实花了太多时间搜索问题,但不幸的是并没有找到。然后我决定使用
方法。感谢BalusC的回答。正如所回答的,您的第一步是在转换器的getAsString()
中放置一个调试断点,探索渲染器调用它的调用堆栈,并检查转换器返回的值。只要你不告诉或问任何关于这个问题的事情,我们就不能进入下一步。我确实花了太多的时间来搜索这个问题,但不幸的是没有找到。然后我决定使用
方法。感谢BalusC的回答。正如所回答的,您的第一步是在转换器的getAsString()
中放置一个调试断点,探索渲染器调用它的调用堆栈,并检查转换器返回的值。只要你不告诉或问任何关于这件事的事情,我们就不能进入下一步。
@FacesConverter("categoryConverter")
public class CategoryConverter implements Converter<Category> {
@Override
public Category getAsObject(FacesContext fc, UIComponent uic, String string) {
...
}
@Override
public String getAsString(FacesContext fc, UIComponent uic, Category t) {
return String.valueOf(t.getId());
}
}
<h:selectManyCheckbox id="categories" value="#{bExam.categoriesSelected}" converter="categoryConverter">
<f:selectItems
value="#{bExam.categories}"
var="category"
itemLabel="#{category.name}"
itemValue="#{category}"/>
</h:selectManyCheckbox>
public class Category implements Serializable
{
private int id;
private String name;
private int sortOrder;
private int categorySetId;
getters & setters...
}