1

複合主キーを持つエンティティのコンバーターをどのように作成しますか?

`\edit_representative.xhtml?emp_id=12345&project_id=45 のような URl でエンティティを編集したい

私はOmnifacesを使用しているので、単一の主キーにはこのようなものがあります

<o:viewParam name="emp_id" value="#{projectRepEdit.projectRep}"
converter="#{projectRepConverter}"
converterMessage="Bad request. Unknown Project Representative." required="true"
requiredMessage="Bad request. Please use a link from within the system." />

しかし、従業員が取り組んでいる project_id をコンバーターに渡すにはどうすればよいですか

編集

BalusCの回答に基づいて、2番目のオプションを使用し、projectRepConverterコンバーターに次のものを用意しました

String project_id = (String) component.getAttributes().get("project_id");
String emp_id= (String) component.getAttributes().get("emp_id");

ProjectRep prjRep = prjRepRepository.getByEmpIdAndProjectId(emp_id,project_id);
return prjRep;

そしてフェイスレットで

<f:metadata>
<o:viewParam name="project_id" value="#{projectRepEdit.project}"
    converter="#{projectConverter}"
    converterMessage="Bad request. Unknown Project." required="true"
    requiredMessage="Bad request. Please use a link from within the system." />

<o:viewParam name="badge" value="#{projectRepEdit.projectRep}"
    converter="#{projectRepConverter}"
    converterMessage="Bad request. Unknown Project Rep." required="true"
    requiredMessage="Bad request. Please use a link from within the system.">
    <f:attribute name="project_id" value="#{param.project_id}" />
    <f:attribute name="emp_id" value="#{param.emp_id}" />
</o:viewParam>
4

1 に答える 1

2

<f:viewParam>もも、<o:viewParam>複数のパラメータの取得をサポートしていません。パラメータを手動で取得する必要があります。これには、次の 2 つの基本的な方法が考えられます。

  1. コンバーターでリクエストパラメーターとして取得します。

    String project_id = FacesLocal.getRequestParameter(context, "project_id");
    

  2. または、コンポーネント属性として渡します。

    <o:viewParam ...>
        <f:attribute name="project_id" value="#{param.project_id}" />
    </o:viewParam>
    

    コンバーターで次のように取得できるようにします。

    String project_id = (String) component.getAttributes().get("project_id");
    

どの方法を選択するかは、コンバーターの意図的な再利用性に依存します。たとえば、2 番目の方法でproject_id属性名の名前を変更しcompound_keyて再利用可能にすることができます。

于 2014-06-17T08:59:22.510 に答える