1

入力に「、」各4つの数字を入力するにはどうすればよいですか。次のようなものがあります。

<p:inputMask mask="9999, 9999" placeHolder="_"/>

しかし、「N」の値が必要なので、これを行う方法がわかりません。

4

1 に答える 1

0

入力マスクを使用して入力を制限できます。これは、ユーザーがシステムにデータを入力した時点で制限されます。制限数なしで設定することはできません。

代わりにコンバーターを使用することをお勧めします。

xhtml

<h:form>
    <p:inputText id="input" 
                 converter="numberConverter" 
                 value="#{inputTextView.numberInput}" >
        <p:ajax process="input" 
                update="input" 
                event="blur"/>
    </p:inputText>
</h:form>

マネージドビーン

@SessionScoped
@ManagedBean(name = "inputTextView")
public class InputTextView {

    private String numberInput;

    public String getNumberInput() {
        return numberInput;
    }

    public void setNumberInput(String numberInput) {
        this.numberInput = numberInput;
    }   
}

コンバータ

import java.io.Serializable;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;

/**
 *
 * @author Wittakarn
 */
@FacesConverter("numberConverter")
public class NumberConverter implements Serializable, Converter {

    public Object getAsObject(FacesContext fc, UIComponent uic, String string) {
        return string.replaceAll(",", "");
    }

    public String getAsString(FacesContext fc, UIComponent uic, Object o) {
        String resp = "";
        DecimalFormat decimalFormat;
        if (o != null) {
            decimalFormat = new DecimalFormat("#,####");
            decimalFormat.setRoundingMode(RoundingMode.HALF_UP);
            try {
                resp = decimalFormat.format(Double.parseDouble(o.toString()));
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }

        return resp;

    }
}
于 2014-10-14T07:34:18.260 に答える