0

p:galleria コンポーネント内からコマンド リンクを作成しようとすると問題が発生します。問題は、実行時にリンク値value="Show present #{present.name} #{present.presentId}"に例として正しい ID 値が含まれているにもかかわらずvalue="Show present Foo 1"、コマンド リンクを押すと、2 番目の間違った ID が送信されることです。毎回オブジェクト

<h:form>
    <p:galleria value="#{presentBean.allPresentList}" var="present" panelWidth="500" panelHeight="313" showCaption="true">  
        <f:facet name="content">
            <h:commandLink value="Show present #{present.name} #{present.presentId}"                   action="pretty:present" actionListener="#{presentBean.setPresentObj}">
                <f:attribute name="present" value="#{present.presentId}"/>
              </h:commandLink>
        </f:facet>
    </p:galleria> 
</h:form>

@ManagedBean(name="presentBean")
@SessionScoped
public class PresentBean implements Serializable{

    ArrayList<Present> allUserPresentList = new ArrayList<Present>();

    @PostConstruct
    private void usersPresent(){
        PresentDao presentDao = new PresentDaoImpl();
        allPresentList = (ArrayList<Present>) presentDao.findAllPresents();
    }

    public ArrayList<Present> getAllUserPresentList() {
        return allUserPresentList;
    }

    public void setAllUserPresentList(ArrayList<Present> allUserPresentList) {
        this.allUserPresentList = allUserPresentList;
    }

    private String presentId ;

    public String getPresentId() {
        return presentId;
    }

    public void setPresentId(String presentId) {
        this.presentId = presentId;
    }

    public void setPresentObj(ActionEvent ev){
        Object presentOb = ev.getComponent().getAttributes().get("present");
        if(presentOb != null){
            this.presentId = (String) presentOb;
        }else{
            presentId = null ;
        }
    }
}

デバイスの仕様を確認する必要がある場合でも、その方法を確認することは可能です。場合によっては、direct-x/system 呼び出しを行うだけで、Windows が残りを処理するか、ドライバーをラップして対話する必要があります。しかし、残念ながらここには簡単な答えはありません。それはすべて特定のカードに依存し、それはドライバーです。

したがって、カードの仕様を投稿するか、それについて調査を行ってください。

4

1 に答える 1

1

<f:attribute name="present" value="#{present.presentId}"/>f:attribute タグは、反復された行に基づいてコンポーネントが html を生成するときではなく、コンポーネントが作成されたとき (1 回だけ) にのみ評価されるため、代わりに setPropertyActionListener を使用する必要があります。

したがって、代わりに次を使用する必要があります。

 <f:setPropertyActionListener target="#{presentBean.presentId}" value="#{present.presentId}" />

これにより、管理対象 Bean に presentId の値が設定されるため、アクション メソッドで、解決する必要なく、presentId 自体にアクセスすることができます。

または、新しいバージョンの JSF (サーブレット 3.0 以降を使用) を使用している場合は、presentId または現在のオブジェクトをパラメーターとして受け取るマネージド Bean のメソッドを作成できます。

たとえば、マネージドBeanで:

 public void myAction(Present p){
       //do whatever you want with the Present object
    }

そしてあなたの.xhtmlで:

<h:commandLink value="Show present #{present.name} #{present.presentId}"         actionListener="#{presentBean.myAction(present)}">
</h:commandLink>
于 2013-06-12T22:09:18.183 に答える