Tôi có một lĩnh vực trong đối tượng tên miền của tôi mà tôi xác định như một Integer ...Làm cách nào để thay đổi cách GRAILS GSP fieldValue định dạng Số nguyên?
Integer minPrice
sau đó tôi truy cập vào nó trong một trang GSP như sau:
${fieldValue(bean: myBean, field: 'minPrice')}
và những gì tôi nhận được trong tôi HTML là ...
100,000
không phải là số nguyên, đó là chuỗi. Tệ hơn nữa nó vẫn là một String được định dạng trong một miền địa phương cụ thể. Đây là một vấn đề bởi vì tôi có một điều khiển SELECT trên một MẪU HTML trong đó có một (không thứ tự) phạm vi giá trị cho minPrice mà tôi muốn lưu trữ trong đối tượng tên miền của tôi như là số nguyên, và tôi không muốn lưu trữ một chỉ mục vào một số mảng các giá trị mà tôi phải liên tục ánh xạ qua lại giữa, tôi muốn chính giá trị đó.
chọn kiểm soát của tôi trông như thế này ...
<g:select name="minPrice"
value="${fieldValue(bean: personInstance, field: 'minPrice')}"
onchange="setDirty()"
noSelection='${['0':'Select a number...']}'
from="${[
['name':'100,000', 'id':100000],
['name':'200,000', 'id':200000],
['name':'300,000', 'id':300000]
]}"
optionKey="id" optionValue="name"
/>
Khi tôi nhận được giá trị từ các lĩnh vực SELECT để gửi lại cho máy chủ nó một cách chính xác có giá trị Integer, mà tôi vẫn tồn tại. Tuy nhiên, chuyến đi khứ hồi không bao giờ chọn trước hàng phải trong trình đơn thả xuống vì giá trị là chuỗi được phân cách bằng dấu phẩy này.
Điều này hoạt động tốt ở nơi khác trong mã của tôi đối với các số nhỏ nơi định dạng dấu phẩy không được phát, và chuyến đi khứ hồi vào và ra khỏi SELECT thành công. Nhưng giá trị> 999 không hoạt động.
Tài liệu nói "Thẻ này sẽ kiểm tra một bean đã là chủ đề của ràng buộc dữ liệu và thu được giá trị của trường từ giá trị được gửi ban đầu chứa trong đối tượng lỗi của bean trong quá trình liên kết dữ liệu hoặc từ giá trị của một thuộc tính của bean. Một khi giá trị thu được, nó sẽ được mã hóa HTML tự động. "
Đó là bit cuối cùng mà tôi muốn tránh khi có vẻ như định dạng Số nguyên. Vậy, tôi cần biết chút gì về ma thuật Grails/GSP để tôi có thể lấy Integer của mình để được hiển thị như một số nguyên trong SELECT và chọn trước hàng phải không?
EDIT: Tôi đã thử một số điều hơn nữa dựa trên các câu trả lời dưới đây, với kết quả khá thất vọng cho đến nay ...
Nếu tôi đặt thẻ <gformatNumber/>
trong <g:select/>
tôi lấy mã trang dưới dạng văn bản trong trình duyệt.
<g:select name="minPrice"
value='<g:formatNumber number="${fieldValue(bean: personInstance, field: 'minPrice')}" format="#" />'
onchange="setDirty()"
noSelection='${['0':'Select a number...']}'
from="${[
['name':'100,000', 'id':100000],
['name':'200,000', 'id':200000],
['name':'300,000', 'id':300000],
]}"
optionKey="id" optionValue="name"
/>
Sử dụng thẻ định dạng số từ GSP trên giá trị Integer của tôi về 100000 như thế này ...
var x = <g:formatNumber number="${fieldValue(bean: personInstance, field: 'minPrice')}" format="#" />;
cho 100
. Hãy nhớ rằng fieldValue
trả lại 100,000
, vì vậy đây không phải là một bất ngờ.
Nếu tôi sử dụng taglib jsp như thế này ...
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
var y = <fmt:formatNumber value="${fieldValue(bean: personInstance, field: 'minPrice')}" pattern=".00"/>;
tôi nhận được một lỗi từ trình biên dịch trang Cannot format given Object as a Number
.
Tôi đoán tôi có mối quan tâm rộng hơn có vẻ như không nhận được giá trị Integer làm số nguyên chính vào mã của tôi nếu nó lớn hơn 999 vì hành vi mặc định (và không thể định cấu hình) của chỉ thị fieldValue. Tuy nhiên vấn đề cụ thể của tôi về việc không thể chọn trước một giá trị Integer trong một điều khiển SELECT sẽ không biến mất. Tại thời điểm này tôi đang ở một chút mất mát.
Bất kỳ ai có thêm ý tưởng nào?
Tôi không thể thực hiện một trong các giải pháp này ... xem chỉnh sửa ở trên. Nhìn lại nó là hiển nhiên, nếu đây là Java đơn giản, tôi sẽ không cần một trình định dạng số, tôi sẽ cần Integer.parseInt() để lấy kết quả từ fieldValue trở lại đúng loại. Điều này không thể là khó khăn này ... tôi đang làm gì sai. – Simon