1

パートナーのリストを含む JSF ページを取得しました。

ページは、choiceMode リクエスト パラメータで設定されたデフォルト モードと選択モードの 2 つのモードで開かれます。

パラメーターが未定義の場合choiceMode、行をクリックできるのは単なるリストであり、行の詳細を含むページに移動します

親ウィンドウにネストされた でchoiceMode="1"ページが開かれていることを意味する場合<iframe>

ユーザーが行をクリックしても、行のページは開きませんが、選択した行パラメーターを親ウィンドウに送信する JavaScript を実行します。

問題は、選択モードのときに使用される JavaScript を構築することです。デフォルトモードでは、それはちょうどでなければなりませんが""、選択モードでは、次のようなものでなければなりません

rowOnClick(5, "Partner #5")

二重引用符を入れるにはどうすればよいですか?

rowOnClick(5, Partner #5)メソッドを使用して(引用符なしで)のようなものを構築できconcatますが、引用符が問題のようです。私は試してみましたが&quote;\'\"も機能しません

ページのコード:

<?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(',&quote;').concat(cc.attrs.rowName).concat('&quote;)')}" 
                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>
4

2 に答える 2