0

私が考える最も基本的なシナリオのいくつかを実行しようとしています。

開始ページにはデータベースからのカテゴリのリストがあり、カテゴリをクリックすると、そのカテゴリに関する詳細が記載されたページが表示されます (名前や製品などを印刷する場合があります)。

BalusCがブログ投稿で行ったことをやろうとしていました

私はJava-ee-7、グラスフィッシュ4.1、休止状態4.3.5を使用しています

index.xhtml で、パラメーターを使用してカテゴリへのリンクを作成します。

<h:link outcome="category.xhtml" value="#{category.name}">
    <f:param name="categoryId" value="#{category.id}"/>
</h:link>

カテゴリは、クエリ文字列categoryIdパラメーターを使用して問題なく出力されます。

次に、category.xhtml に次のものがあります。

<f:metadata>
    <f:viewParam name="categoryId" 
        value="#{categoryController.category}"
        converter="#{categoryConverter}" />
</f:metadata>

<h:body>
    Category name:

    <h:outputText value="#{categoryController.category.name}" />
    <!-- this one prints nothing -->

</h:body>

CategoryController コードは次のようになります。

@Named
@RequestScoped
public class CategoryController {

    private Category category;

    public void setCategory(Category category) {
        this.category = category;
    }
    public Category getCategory() {
        return category;
    }
}

コンバーターは次のようになります。

@Named
@RequestScoped
public class CategoryConverter implements Converter {

    @Inject
    private CategoryRepository categoryRepository;

    @Override
    public Object getAsObject(FacesContext facesContext, UIComponent uiComponent, String s) {
        return categoryRepository.find(Integer.parseInt(s));
    }

    @Override
    public String getAsString(FacesContext facesContext, UIComponent uiComponent, Object o) {
        if (o == null || !(o instanceof Category)) {
            return null;
        }
        return ((Category) o).getId().toString();
    }
}

いくつかのテスト専用getAsStringメソッドが呼び出されますが、代わりにあるべきだと思いますgetAsObject

ステートメント<h:outputText value="#{categoryController.category.name}" />は何も出力しません (おそらく null です)。category.xhtmlページにカテゴリエンティティを含めるにはどうすればよいですか?

--

明確にするために、次のようなもので機能させます

<h:commandButton action="#{categoryController.showCategory(category)}" />

しかし、これは生成さhttp postれ、簡単なgetリクエストが必要です。私にとっては、経由でしかアクセスできないというのはばかげているでしょうpost

何か不足している場合に備えて、不要なコードを取り除いた github からアクセスできるようにします: https://github.com/Yavin/jsf-entity-convert

4

0 に答える 0