1

私はJSF 1.2を使用して<h:dataTable>おり、現在の行がアクションメソッドの引数として渡される行を削除および/または更新しようとしています。

意見:

<h:dataTable value="#{myBean.list}" var="categoria">
  ...
  <h:column>
    <h:commandButton value="Update" action="#{myBean.updateCat(categoria)}" />
    <h:commandLink value="Delete" action="#{myBean.deleteCat(categoria.cod)}" />
  </h:column>
</h:dataTable>

コントローラ:

public void deleteCat(int cod) {
  this.controller.deleteCat(cod);
}

public void updateCat(Categoria cat) {
  this.controller.updateCat(cat);
}

しかし、次のエラーが発生します。

デフォルトの名前空間が指定されていない場合は、関数 deleteCat を接頭辞とともに使用する必要があります

これはどのように発生し、どうすれば解決できますか?

4

2 に答える 2

3

デフォルトの名前空間が指定されていない場合は、関数 deleteCat を接頭辞とともに使用する必要があります

このエラー メッセージは、引数を使用して Bean メソッドを呼び出す新しい EL 2.2 機能が現在の EL 環境でサポートされていない場合によく見られます。これは、現在の EL 環境が実際には EL バージョン 2.2 にまったく準拠していない場合に発生する可能性があります。EL 2.2 は Servlet 3.0 の一部であるため、機能するには Servlet 3.0 と互換性のある Servlet 3.0 互換のコンテナー (Tomcat 7、Glassfish 3、JBoss 6 など) がweb.xml必要です。

EL 2.2 より前()では、EL 式の括弧はデフォルトで EL 関数の引数として解釈されます。#{fn:length(bean.list)}ただし、EL 関数は、ピリオドではなく、taglib 名前空間のコロン プレフィックスによって参照されることが期待されます。これは、少なくとも一見するとかなり奇妙なエラーメッセージを説明しています。

レガシー JSF 1.2 を使用している場合、おそらく Servlet 2.5 (Tomcat 6、Glassfish 2、JBoss 4 など) を使用しているため、暗黙的に EL 2.1 も使用しています。引数を使用して Bean メソッドを呼び出す新しい EL 2.2 機能をシミュレートするには、次の回答で概説されているように、JBoss EL をダウンロードしてインストールすることをお勧めします

于 2012-11-12T13:37:40.880 に答える
0

データテーブルを HtmlDataTable にバインドすることで問題を解決できました。

ここで解決策を見つけました: http://www.coderanch.com/t/497447/JSF/java/delete-row-datatable

<h:dataTable id="table" value="#{myBean.list}"
binding="#{myBean.dataTable}"
var="categoria" border="1" styleClass="tabelaFormulario"
headerClass="tabelaTituloFormulario"
rowClasses="tabelaLinhaPar, tabelaLinhaImpar">

その後、Beanで:

private HtmlDataTable dataTable; // + getter & setter   

最後に、選択した行からデータを取得できました

dataTable.getRowData();   

関数は次のようになります。

public void deleteCat() {
    this.controller.deleteCat(this.list.get(this.dataTable.getRowIndex()).getCod());
}

とにかくありがとう、それが他の誰かに役立つことを願っています...

于 2012-11-12T13:25:14.570 に答える