3

tapestry5 でサブフォームを作成したい:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd">

    <t:TextField t:id="name" />
</html>

次のように使用します。

<form t:type="form" t:id="testForm">
    <t:testComponent name="name" />
    <input type="submit"/>
</form>

TestComponent.java:

import org.apache.tapestry5.annotations.Parameter;
import org.apache.tapestry5.annotations.Property;

public class TestComponent {

    @Parameter(required = true, allowNull = false)
    @Property
    private String name;
}

「名前」の値を次のように使用できるようにします。

@Property
private String name;

void onSuccessFromTestForm() {
    System.out.println(name);
}

しかし、私が得るのはアプリケーションの例外だけです:

Render queue error in BeginRender[Index:testcomponent.name]: Failure reading parameter 'value' of component Index:testcomponent.name: Parameter 'name' of component Index:testcomponent is bound to null. This parameter is not allowed to be null.

どうしたの?

4

2 に答える 2

1

Formタペストリーは、yourと yourを含むコンポーネントにTestComponent、値が null のプロパティ「name」があることを示しています。したがって、問題は ではなくTestComponent、1 コンポーネント/ページ上にあります。名前に値を割り当てると、うまくいくはずです。

編集

フォームを介して値を割り当てることを許可し、ページのレンダリング中に null 値を許可する場合は、 から を削除allowNull = falseして@ParameterくださいTestComponent。フォームを送信する前に、ユーザーに名前フィールドの値を入力させたいと思います。t:validate="required"これは、 ではなく、属性を追加することによって入力フィールドで行われます@Parameter。は@Parameter、インスタンス変数がコンテナとどのように相互作用するかをタペストリーに伝えますが、変数が独自のコンポーネント内でどのように使用されるかについては何も言いません。

于 2013-09-01T20:07:53.593 に答える
0

@Parameterアノテーションは、コンストラクターに対するパラメーターのようなものです。基本的に、あなたのコードは次のように言っています

public TestComponent(String name){
  if(name == null) thrown new Exception("No Nulls in here boy");
}

コンポーネントで何らかの処理を行いたい場合に NullPointers を防ぎ、NPE のルートを検索することは世界で最も面倒なことです。さらに、requiredを true に設定しました。これは、コンポーネントに何らかの値を渡す必要があることを意味します。name 変数を何かに初期化する必要があります。空の文字列で十分です。達成したい動作を台無しにすることはありませんが、タペストリーを満たすことができます。

これにより、現在の技術的な問題が修正されます。実際の問題については、前述のように検証を使用して、検証ルールを設定する必要があります。それを実現する方法はいくつかあります。前述の joostschouten のようにt:validateonValidateFromName(String name) throws ValidationException{...}を追加するか、コンポーネントに追加してください。2 番目の方法は、このような単純な検証には少しやり過ぎですが、より複雑なものには必要になる場合があります。

このトピックに関する参考文献:

http://tapestry.apache.org/forms-and-validation.html http://tapestry.apache.org/component-parameters.html http://jumpstart.doublenegative.com.au/jumpstart/examples/input/バリデータ http://jumpstart.doublenegative.com.au/jumpstart/examples/input/morevalidation

于 2013-09-12T05:55:18.047 に答える