1

私はこの質問がすでにここで答えられているのを見ましたが、同じアプローチを試したとき、それはうまくいきませんでした。これが私のコードです:

package linear_programming.matrix;

import java.lang.reflect.Array;
import java.text.DecimalFormat;
import java.text.NumberFormat;

/**
 *
 * @author Jevison7x
 */
public final class MatrixOperations<T extends Number>
{
    /**
 * This method round's off decimal numbers to two decimal places.
 * @param d The decimal number to be rounded off.
     * @param decPlaces The number of decimal places to round off.
 * @return the rounded off decimal number.
 */
public static double roundOff(double d, int decPlaces)
{ 
        if(decPlaces < 0)
            throw new IllegalArgumentException("The number of decimal places cannot be less than 0.");
        else
        {
            String places = "";
            for(int i = 0; i < decPlaces; i++)
            places += "0";
            NumberFormat nf = new DecimalFormat("0."+places);
            return Double.parseDouble(nf.format(d));
        }
}
}

これが私のtldファイルです:

<?xml version="1.0" encoding="UTF-8"?>
<taglib 
    version="2.1" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd">

    <display-name>Custom Functions</display-name>
    <tlib-version>1.0</tlib-version>
    <short-name>func</short-name>
    <uri>/WEB-INF/tlds/Functions</uri>

    <function>
        <name>roundOff</name>
        <function-class>linear_programming.matrix.MatrixOperations</function-class>
        <function-signature>double roundOff(double int)</function-signature>
    </function>
</taglib>

次に、JSPファイルを示します。

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@taglib uri="/WEB-INF/tlds/Functions" prefix="func"%>
<table>
    <c:forEach var="Msegment" items="${multipliedSegments}" varStatus="segmentCount">
    <tr>
        <td>X<sub>${segmentCount.count}</sub><sup>T</sup>X<sub>${segmentCount.count}</sub>=</td>
        <td>
            <table border="1">
        <c:forEach var="row" items="${Msegment}">
                <tr>
            <c:forEach var="col" items="${row}">
                <td>${col}</td><!-- Iwant to invoke the static method here -->
            </c:forEach>
                </tr>
        </c:forEach>
            </table>
        </td>
    </tr>
    <tr><td>&nbsp;</td><td>&nbsp;</td></tr>
    </c:forEach>
</table>

静的メソッドを呼び出したいだけです

roundOff(double d, int decPlaces)

変数を渡します

${col} 

doubleパラメータとして-dとすると、decPlacesには任意の数を使用できます。どんな助けでも大歓迎です。

4

1 に答える 1

6
 ${func:roundOff(col, 1)}

すべきです。しかし、私の知る限り、taglibファイルの署名は

double roundOff(double, int)
                      ^--- comma here.

これが機能しない場合は、単に「機能しない」と言うのではなく、表示される正確なエラー メッセージについて言及してください。

于 2012-09-06T09:47:00.847 に答える