間違ったセレクターを使用しました。パネルにクラスを定義しませんでしたが、代わりに名前付けコンテナーによって変更されるIDを定義しました。コメントを考慮すると、最も簡単な解決策は、必要なパネルに追加のクラスを定義することです。
景色:
<h:form id="form">
<p:dataTable id="table">
<p:panel id="hoverPanel" styleClass="base-class #{bean.condition ? 'change-panel' : ''}">
<p:commandLink id="button" styleClass="btn" value="Show" rendered="condition">
</p:commandLink>
</p:panel>
</p:dataTable>
</h:form>
そしてJavaScriptであなたの仕事をしてください:
$('.change-panel').hover(
function () {
$(this).find('.btn').toggleClass('visible');
}
//or do your job by binding two function handlers to distinguish between mouse events
);
完全な答え
あなたのコメントと与えられた自己回答によると、それは明らかに仕事をするための最良の方法ではありません、私は完全な答えを投稿します。次の質問をすることにし、答えが得られる場合は、提示されたコードを完全に調査するために最善を尽くしてください。また、途中でJavaScript/jQueryを学ぶのが賢明でしょう。
ビューには2列のデータテーブルが表示され、2番目の列には必要なリンクを含むパネルが表示されます。この表には、考えられるすべての選択肢が含まれているため、最適な設定を選択してください。
表示:
<h:head>
<h:outputScript name="js/js.js" target="body"/>
<style>
.invisible {
display: none
}
</style>
</h:head>
<h:body>
<h:form id="form">
<p:dataTable value="#{bean.data}" var="data" id="table" rowIndexVar="index">
<p:column headerText="Data">
<h:outputText value="#{data}"/>
</p:column>
<p:column headerText="Other functions">
<p:panel id="hoverPanel" styleClass="#{((index eq 0) || (index eq 1) || (index eq 2)) ? 'change-panel' : ''}">
<h:outputText value="Row #{index + 1}"/>
<p:commandLink id="button" value="Show"
rendered="#{!((index eq 1) || (index eq 3))}"
styleClass="btn #{(index eq 0) ? 'invisible' : ''}"/>
</p:panel>
</p:column>
</p:dataTable>
</h:form>
</h:body>
JavaScript:
$(document).ready(function() {
$('.change-panel').hover(
function () {
$(this).find('.btn').toggleClass('invisible');
}
);
});
Bean:
@ManagedBean
@RequestScoped
public class Bean implements Serializable {
private List<String> data = new ArrayList<String>();
public Q15435267Bean() {
data.add("Data element 1");
data.add("Data element 2");
data.add("Data element 3");
data.add("Data element 4");
data.add("Data element 5");
}
public List<String> getData() {
return data;
}
public void setData(List<String> data) {
this.data = data;
}
}