ここに状況があります。マネージドBeanをコンバーターとして使用して、データベースからSelectManyCheckBoxに事前入力しましたが、正常に機能します。これが私のConverterクラスです
@ManagedBean
@RequestScoped
public class RoleConverter implements Converter{
@EJB
private UserRoleSingleton userRoleSingleton;
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
if(value == null){
return null;
}
return userRoleSingleton.getUserRoleById(Integer.parseInt(value));
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
if(!(value instanceof Userrole) || ((Userrole) value).getRoleId() == null){
return null;
}
Userrole role = (Userrole) value;
return String.valueOf(role.getRoleId());
}
public RoleConverter() {
}
}
チェックボックスを事前に選択した後、チェックボックスを選択または選択解除するか、何もせずにフォームの送信ボタンをクリックします。次に、ボタンの最初のクリックで、コンバーターのgetAsStringメソッドが再度実行され、ページがリロードされます。そして、2回目のクリックで、期待どおりにgetAsObjectメソッドを実行し、次にアクションを実行します。
これが私のSelectManyCheckBoxです。
<p:selectManyCheckbox id="orgpermission"
value="#{adminView.selectedrolesorg}" layout="pageDirection">
<f:selectItems value="#{adminView.allRolesRelatedToOrgInfo}"
var="citrole" itemValue="#{citrole}"
itemLabel="#{citrole.roledescription}" converter="#{roleConverter}" />
</p:selectManyCheckbox>
getAsStringメソッドを再度実行する理由と、それを解決して最初のクリックでアクションメソッドを起動する方法を教えてください。