我试图实现
,但没有成功。
现在我有了以下架构:
Course - have many Disciplines
Discipline - belongs to none, one or many Courses.
在course
类中,我有两个arraylist
:
public class CourseMBean{
(...)
// Stores all disciplines
private static ArrayList<Discipline> allDisciplines;
// Stores only the disciplines that's already associated with this course.
private static ArrayList<Discipline> courseDisciplines;
(get and set for the arraylists)
(...)
}
我希望在复选框中显示所有学科,并且希望当用户选择一个复选框时,将该复选框的对象学科添加到CourseDrimescies中-当取消选择一个复选框时,从CourseDiciplines中删除该学科。
我的JSF2.0代码如下:
<p:selectManyCheckbox id="disciplines" value="#{courseMBean.allDisciplines}" layout="grid" columns="2">
<f:selectItems value="#{courseMBean.courseDisciplines}" />
</p:selectManyCheckbox>
这实际上显示了没有任何选中复选框的所有纪律,什么是正确的。但是当我选择一些复选框并提交表单时,我会尝试打印CourseDridgeses中的元素,而这在控制台中并不显示任何内容。
我做错了什么?
当我选中一些复选框并提交表单时,我会尝试打印CourseDridges中的元素
由于CourseDridges
实际上表示可用项而不是选定项,因此您似乎误解了UISElectMany
和UISElectItem(s)
组件的一些基本概念。
(来自UISelectItem(s)
系列)表示可用项。正是那些显示在UI中并且最终用户必须从中选择的项目。
的value
属性(来自UISelectmany
系列,如
和
)表示(预先)选定的项目。如果在首次显示窗体时该值为空或空,则未预选任何内容。或者如果其中包含一些预选项,则只会预选equal()
的可用项。
当最终用户更改UI中的选择并提交表单时,所有选择的项都将在UISelectMany
组件的value
属性中结束。UISelectItem(s)
保持不变。
下面是一个基本的起始示例:
<p:selectManyCheckbox value="#{bean.selectedItems}">
<f:selectItems value="#{bean.availableItems}" />
</p:selectManyCheckbox>
<p:commandButton value="Submit" action="#{bean.submit}" />
<p:messages autoUpdate="true" />
private List<String> selectedItems; // +getter +setter
private List<String> availableItems; // +getter (no setter necessary!)
@PostConstruct
public void init() {
availableItems = new ArrayList<String>();
availableItems.add("one");
availableItems.add("two");
availableItems.add("three");
}
public void submit() {
System.out.println("Selected items: " + selectedItems);
}
(所有其他
和
组件的工作方式完全相同)
当出现像纪律
这样的复杂Javabean对象时,您需要确保有一个转换器
,以便JSF能够在它和String
之间进行适当的转换,用于生成的HTML输出和HTTP请求参数(HTML和HTTP既不能传递也不能保存Java对象,而只能保存Java中由String
表示的字符序列)。
这也许是你的根本问题。您说提交时不会将任何内容打印到控制台。但如果整个submit()
方法实际上从未被调用,也可能是好的。你在这件事上不够明确。如果整个action方法确实从未被调用(即调试断点没有命中,或者控制台中从未显示另一个system.out.println()
打印静态字符串),那么实际上很可能是一个转换错误。如果您正确地使用了
,或者注意了关于排队但未显示的faces消息的服务器日志,那么您应该已经注意到了。
在这种情况下,您需要实现一个转换器
在纪律
和字符串
之间进行转换。
@FacesConverter(forClass=Discipline.class)
public class DisciplineConverter implements Converter {
@Override
public Object getAsObject(FacesContext context, UIComponent component, String submittedValue) {
// Write code here to convert from String to Discipline.
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object modelValue) {
// Write code here to convert from Discipline to String.
}
}
DB ID通常用作string
表示形式。另请参阅本答案的“作为选定项的复杂对象”一节中的一个相关问题:如何从数据库中填充h:selectonemenu的选项?
问题内容: 这是课程: 现在,我试图从类中“反射”此方法: 问题答案: 只有一个。 另一种选择是。 其他原语也是如此。
我有一个upsert需求,所以我需要调用postgres存储过程或使用公共表表达式。我还将pgcrypto扩展用于密码,并希望使用postgres函数(例如“crypt”来编码/解码密码)。 但是我找不到让ecto部分或全部使用原始sql的方法,是不是打算让ecto只支持长生不老的dsl,而不允许在dsl不够用的情况下使用原始sql? 我发现我可以通过适配器进行查询(Rocket是应用程序的名称)
我目前正在构建一个Android议程活动,其中包括4个列表视图。基本上,我在AgendaDataReady(数组列表约会)上得到了由Web服务协调员调用的方法。此方法对约会进行排序,这样,将填充 4 个新的 ArrayList。代码如下: 这段代码工作正常,但是我不想再使用android了。R.layout.simple_list_item_1布局。所以我构建了一个自定义布局的ArrayAdapt
注:[2017年1月11日]RestInfoAdapter.java的源代码已经更改和更新(参见下面的第2项) 我一直在尝试通过保留原始输入列表的备份/副本来使我的搜索视图返回到原始列表。但是,它根本不起作用。我的这个问题包括使用自定义类的RecyclerView和ArrayList。 是一个名为<code>RestInfo 我是如何尝试的 适配器类,以便RestInfo可以呈现在卡片视图中(因此
我在Ubuntu 14.04中安装了phpbrew以使用PHP5.4。它工作得很好,但当我尝试使用composer时除外,composer会忽略phpbrew并安装与PHP5.5相关的依赖项。 有没有办法强制composer与phpbrew config兼容?我试图在我的作曲家中添加:php:“5.4”。json,但是它说这个要求在我的php版本中是不可能的。
我是Micronaut框架的新手,我正在尝试使用entitymanager创建我的存储库。我这样创建了我的存储库 我使用这个类实现接口并注入entitymanager 问题是我一直有这个错误: PS:我已经启用了注释处理