パートナーのリストを含む JSF ページを取得しました。
ページは、choiceMode リクエスト パラメータで設定されたデフォルト モードと選択モードの 2 つのモードで開かれます。
パラメーターが未定義の場合choiceMode
、行をクリックできるのは単なるリストであり、行の詳細を含むページに移動します
親ウィンドウにネストされた でchoiceMode="1"
ページが開かれていることを意味する場合<iframe>
ユーザーが行をクリックしても、行のページは開きませんが、選択した行パラメーターを親ウィンドウに送信する JavaScript を実行します。
問題は、選択モードのときに使用される JavaScript を構築することです。デフォルトモードでは、それはちょうどでなければなりませんが""
、選択モードでは、次のようなものでなければなりません
rowOnClick(5, "Partner #5")
二重引用符を入れるにはどうすればよいですか?
rowOnClick(5, Partner #5)
メソッドを使用して(引用符なしで)のようなものを構築できconcat
ますが、引用符が問題のようです。私は試してみましたが"e;
、\'
何\"
も機能しません
ページのコード:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ez="http://java.sun.com/jsf/composite/ezcomp"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:head>
<title>Partners</title>
<script>
function cellOnClick(id, name) {
parent.document.getElementById("form:parentId").value = id;
parent.document.getElementById("form:parentName").value = name;
}
</script>
</h:head>
<f:metadata>
<f:viewParam name="choiceMode" value="#{partnersManagedBean.choiceMode}"/>
</f:metadata>
<h:body>
<c:choose>
<c:when test="#{partnersManagedBean.choiceMode == '1'}">
<c:set var="onclick" value="cellOnClick"/>
</c:when>
<c:otherwise>
<c:set var="outcome" value="partner"/>
</c:otherwise>
</c:choose>
<h:dataTable value="#{partnersManagedBean.partnersList}" var="item">
<h:column>
<f:facet name="header">
Name
</f:facet>
<ez:cell id="name" value="#{item.value.name}" rowId="#{item.value.id}" rowName="#{item.value.name}" outcome="#{outcome}" onclick="#{onclick}"/>
</h:column>
</h:dataTable>
</h:body>
</html>
複合コンポーネント:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:cc="http://java.sun.com/jsf/composite"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<cc:interface>
<cc:attribute name="value" required="true"/>
<cc:attribute name="rowId" required="true"/>
<cc:attribute name="rowName" required="true"/>
<cc:attribute name="outcome" default=""/>
<cc:attribute name="onclick" default=""/>
</cc:interface>
<cc:implementation>
<h:link id="nameLink"
outcome="#{cc.attrs.outcome}"
onclick="#{cc.attrs.onclick==''?'':cc.attrs.onclick.concat('(').concat(cc.attrs.rowId).concat(',"e;').concat(cc.attrs.rowName).concat('"e;)')}"
class="cell-link"
style="cursor: pointer">
<f:param name="id" value="#{cc.attrs.rowId}"/>
<div class="cell-div">
#{cc.attrs.value}
</div>
</h:link>
</cc:implementation>
</html>