1

以前にJSPで設定した属性(.tld内)を読み取りたいだけです。どうやって出力するのかわからない。<c:out value = ...> taglibの使用方法の記事の提案を試した後、空の値が出力されます。したがって、変数(たとえば、「instanzVar1」)はどういうわけか範囲外のようです。

ここに私の.java:

public class BirolName extends SimpleTagSupport implements SimpleTag {
String instanzVar1;
Boolean instanzVar2;
int instanzVar3;    

@Override
public void doTag() throws JspException, IOException {
    //Zum Schreiben in die JSP "JSPWriter"
    JspWriter outputJSP = getJspContext().getOut();
    outputJSP.println("Birol was here :-) (Taglib von Java -nach-> JSP hat funktionniert!)");
    outputJSP.println("Die eingegebenen Paramter über die JSP waren:");
    outputJSP.println("<br /><b>");
    outputJSP.println("Paramter 1:"+instanzVar1);
    outputJSP.println("<br />");
    outputJSP.println("Paramter 2:"+instanzVar2);
    outputJSP.println("<br />");
    outputJSP.println("Paramter 3:"+instanzVar3);
    outputJSP.println("</b><br />");
}

public String getInstanzVar1() {
    return instanzVar1;
}


public void setInstanzVar1(String instanzVar1) {
    this.instanzVar1 = instanzVar1;
}
......
}

私の.tld:

 <?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd">
    <tlib-version>1.0</tlib-version>
    <short-name>st</short-name>
    <tag>
        <name>birolNameTag</name>
        <tag-class>st.BirolName</tag-class>
        <body-content>empty</body-content>
        <attribute>
            <name>instanzVar1</name>
            <required>true</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
        <attribute>
            <name>instanzVar2</name>
            <required>true</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
        <attribute>
            <name>instanzVar3</name>
            <required>true</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
    </tag>
</taglib>

そして、少なくとも.jsp:

   <!-- Einbindung des Taglibs -->
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="/WEB-INF/st.tld" prefix="st"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<p>
    Aufruf der Taglib mit "taglibPrefix:NameDesTag"
    <br /> <st:birolNameTag instanzVar1="BirolString" instanzVar2="true" instanzVar3="1"/>
    <br /><br />

    <jsp:useBean id="a" class="st.BirolName"/>
    Ausgabe des Paramters: <c:out value = "${a.instanzVar1}" />
</p>

解決策はおそらく非常に単純です。それでも私は本当に欲しいものを手に入れませんでした。

4

2 に答える 2

0

あなたがしているのは意味がありません。引数を取るJavaメソッドとしてJSPタグが表示されるはずです。メソッドが呼び出されると、メソッドのハンドルを取得して、最後に呼び出されたタイの引数を尋ねることはできません。

コンテナにはインスタンスのプールがありBirolName、それらを複数のページ、複数のスレッドで使用します。

そして、あなたがするとき

<jsp:useBean id="a" class="st.BirolName"/>,

それはするのと同じです

st.BirolName a = new st.BirolName();

したがって、タグクラスのこの新しいインスタンスから、以前に使用したタグの引数を見つけることは期待できません。

タグのinstanzVar1属性に値を渡す場合、JSP属性は設定されていません。タグに引数を渡すだけです。c:setページスコープ属性を設定するには、次のタグを使用する必要があります。

<c:set var="someAttribute" value="someValue"/>
${someAttribute} <%-- prints someValue --%>
于 2012-11-26T23:18:54.323 に答える
0

私は良い解決策を見つけました。.javaタグクラスでこのコードを使用するだけです。

JspContext pcontext = getJspContext();    
pcontext.setAttribute("myAttribute", this.instanzVar1.concat(this.instanzVar1), Util.getScope("request"));

setAttribute()」は、属性(ここでは「myAttribute」)に値を保存することを提供します。説明:私の場合、taglib属性を使用してJSPに属性を設定します。次に、setAttributeの2番目のパラメーターとしてそれらを配置するだけで.javaに設定できます(ここでは「this.instanzVar1.concat(this.instanzVar1」)。これで、この新しい属性が必要だったので、必要なものが得られました。」 .javaに設定されたmyAttribute"は、JSPで${myAttribute}を使用して呼び出すことができます。

于 2012-11-28T11:08:20.093 に答える