私は、JSF + JPA アプリケーションで双方向の 1 対多の関係を持っています。ビュー内のリストからフィルターされたアイテムのみを一覧表示したい。コントローラーで行うのは難しいのですが、以下のようにフィルタリングすることはできますか?
<p:selectOneListbox id="cmbField" value="#{investigationItemController.current}" >
<f:selectItems value="#{investigationItemController.currentInvestigation.reportItems}" var="ri" itemLabel="#{ri.name}" itemValue="#{ri}" itemRendered="#{ri.retired ne true and ri.ixItemType eq 'Value'}" />
</p:selectOneListbox>
itemRendered は属性ではないため、これを試しましたが失敗しました。
<p:selectOneListbox id="cmbField" value="#{investigationItemController.current}" >
<ui:repeat value="#{investigationItemController.currentInvestigation.reportItems}" var="ri" >
<h:panelGroup rendered="#{ri.retired ne true and ri.ixItemType eq 'Value'}" >
<f:selectItem itemLabel="#{ri.name}" itemValue="#{ri}" />
</h:panelGroup>
</ui:repeat>
</p:selectOneListbox>
所有者エンティティは次のとおりです。
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class InvestigationItem extends ReportItem implements Serializable {
private static final long serialVersionUID = 1L;
@OneToMany(mappedBy = "investigationItem", cascade= CascadeType.ALL)
List<InvestigationItemValue> investigationItemValues;
public List<InvestigationItemValue> getInvestigationItemValues() {
return investigationItemValues;
}
public void setInvestigationItemValues(List<InvestigationItemValue> investigationItemValues) {
this.investigationItemValues = investigationItemValues;
}
}
他のエンティティは次のとおりです
@Entity
public class InvestigationItemValue implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@ManyToOne
private InvestigationItem investigationItem;
private String name;
//Getters and setters and some other fields
}
コントローラ クラスの重要なコード セットは次のとおりです。
@ManagedBean
@SessionScoped
public final class InvestigationItemController implements Serializable {
private static final long serialVersionUID = 1L;
@EJB
private InvestigationItemFacade ejbFacade;
private InvestigationItem current;
private Investigation currentInvestigation;
// Other code goes here
}
JSF/Primefaces で f:selectItem または f:selectItems を使用する場合、アイテムをフィルターするにはどうすればよいですか?
(なぜこの機能がどうしても必要なのか、実際の状況を説明します。
私は医療アプリケーションを開発していますが、用語がわかりにくいです。テストまたは調査 (完全な血球数や尿の完全なレポートなど) には、いくつかのプロパティがあります。テストは調査エンティティとして表されます。1 つまたは複数のフィールド (FBC の場合はヘモグロビン、白血球数、UFR の場合は色、外観など) で構成されるテスト。InvestigationItem として表されます。1 つの InvestigationItem に、さまざまな場合に選択される可能性のある値のリストがある場合があります。それらは InvestigationItemValue として識別されます。したがって、1 つの InvestigationItem には InvestigationItemValue のリストがあります。ただし、一部の InvestigationItemValues は文字列型である場合もあれば、数値型である場合もあります。ユーザーは、特定のタイプの新しい調査を設計するときに、1 つの InvestigationItemValue を選択する必要があります。そのため、ビューでフィルタリングが必要です。)