1

specの例に従って、テンプレートとテンプレート クライアントがあります。

default.xhtml (テンプレート):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:f="http://java.sun.com/jsf/core"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
  <title>...</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <h:outputStylesheet name="css/screen.css" />
</h:head>
<h:body>
  <f:view>
    <ui:insert name="metadata" />
    <div id="container">
      <div id="header">
        <img src="resources/gfx/logo.png" />
      </div>
      <div id="content">
        <ui:insert name="content" />
      </div>
      <div id="footer">
        <p>
          This is a project.<br />
        </p>
      </div>
    </div>
  </f:view>
</h:body>
</html>

edit.xhtml (テンプレート クライアント):

<?xml version="1.0" encoding="UTF-8"?>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
  xmlns:f="http://java.sun.com/jsf/core"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:ui="http://java.sun.com/jsf/facelets"
  template="/WEB-INF/templates/default.xhtml">

  <ui:define name="metadata">
    <f:metadata>
      <f:viewParam name="id" value="#{myBean.id}" />
      <f:event type="preRenderView" listener="#{myBean.init}"/>
    </f:metadata>
  </ui:define>

  <ui:define name="content">
    ...
  </ui:define>
</ui:composition>

list.xhtml (編集ビューの呼び出し元) には以下が含まれます。

<h:commandLink action="edit" value="#{msgs.edit}">
  <f:param name="id" value="#{myentity.id}" />
</h:commandLink>

f:event が呼び出されますが、id (viewParam) が Bean に割り当てられていません。ただし、ID はリクエスト パラメータ マップに存在し、次のように取得できます。

FacesContext ctx = FacesContext.getCurrentInstance();
Map<String, String> parameters = ctx.getExternalContext().getRequestParameterMap();
if (parameters.containsKey("id")) {
  this.id = Long.valueOf(parameters.get("id"));
}

しかし、それ<f:viewParam ...>は(私が理解している限り)世話をする必要があるものです。

何が間違っている可能性がありますか?

4

1 に答える 1

1

これは間違っています。

<h:commandLink action="edit" value="#{msgs.edit}">
  <f:param name="id" value="#{myentity.id}" />
</h:commandLink>

これは、GET 要求ではなく、POST 要求を送信します。

<h:link>代わりに使用する必要があります。

<h:link outcome="edit" value="#{msgs.edit}">
  <f:param name="id" value="#{myentity.id}" />
</h:link>

以下も参照してください。

于 2013-03-18T12:50:01.153 に答える