2

実行時にテキストフィールドを初期化したいと思います。たとえば、次のようなprimefaces入力テキストがあります。

<p:inputText value="#{myBean.value}" id="inputText" />

そしてBeanクラス:

@PostConstruct
public void onPageLoad() {
    ....
    ....
    inputText.setMaxlength(15);
    inputText.setStyle(".....");
}

jsf 2.0でこれを行うことは可能ですか?

4

2 に答える 2

3

コンポーネントを Bean にバインドすることで、これを行うことができます。

<p:inputText binding="#{bean.input}" ... />

private InputText input; // +getter+setter

@PostConstruct
public void init() {
    input = new InputText();
    input.setMaxlength(15);
    input.setStyle("background: pink;");
}

// ...

ただし、これは推奨される方法ではありません。代わりに、個々の属性を Bean プロパティにバインドする必要があります。

<p:inputText ... maxlength="#{bean.maxlength}" style="#{bean.style}" />

private Integer maxlength;
private String style; 

@PostConstruct
public void init() {
    maxlength = 15;
    style = "background: pink;";
}

// ...

さらに、アプリが適切に設計されている場合は、そのような Bean オブジェクトが既にあるはずです (実行時にそれを指定できるようにする必要があるのはなぜですか?)。代わりにマネージド Bean のプロパティにして、次のようなことができるようにします。

<p:inputText ... maxlength="#{bean.attributes.maxlength}" style="#{bean.attributes.style}" />
于 2012-06-04T20:35:15.730 に答える
0

このために、以下のコードを使用してjsfフレームワークからコンポーネントオブジェクトを取得できます

UIComponent componentObj = FacesContext.getCurrentInstance().getViewRoot().findComponent(id)

次に、inputTextを使用している場合のように、タグコンポーネントタイプにキャストコンポーネントオブジェクトを入力できます

HtmlInputText inputTextObj = (HtmlInputText) componentObj;

および HtmlInputText クラスには、タグで使用可能なすべての属性のすべてのゲッター セッターがあるため、次のような値を設定できます。

inputTextObj.setMaxlength(15);
inputTextObj.setStyle(....);
inputTextObj.setDisabled();
inputTextObj.setReadonly();
于 2012-06-05T08:10:37.727 に答える