我想我有點明白這裏有幾個問題:
//These two are the same
Long id=params.id ? params.id as Long : null
Long id=params.id ? params.long('id') : null
它說
Long id= (is there a params.id)
{ yes ? } -> params.id as Long {otherwise :} -> null
findById應在極少數情況下使用:
//You should never use findById unless an example would be findByIdAndSomethingElse(id,somethingElse)
// Product old=Product.findById(params.id)
而應該使用(look int讀取和加載)get是最好的,因爲它確保記錄實際存在,並且讀取可以返回一個緩存副本(可能從此被刪除)(讀取負載較少資源密集型)值得關注 - 因此堅持get:你可能沒有ID,因此它應該圍繞進一步
if (id) {
// Product old=Product.get(id)
// Product old=Product.read(id)
// Product old=Product.load(id)
// You could have just done this which should convert params.id as long itself as the method
Product old=Product.get params.id
def f = request.getFile('productImage')
if(f.empty){
print("file is empty")
if(old.productImage){
println("there is a file in database")
//I think this may be the issue:
product.productImage=old.productImage
//should this not be ?
product=old
}}
現在你已經列出你的聲明,是對我的評論的原因後做什麼舊或產品包裹。
產品或舊產品是否作爲變量發送到gsp頁面它們是如何表示的?
另外,如果這是你的編輯表單;
<div class="col-xs-2 col-sm-2 col-md-2">
<input type="file" class="form-control" name="productImage" id="productImage">
</div>
這是缺失值
<input type="file" class="form-control" name="productImage"
value="${someParams?.value}" id="productImage">
幽州返回null所以它必須是你沒有提供,因爲這個領域實際上沒有定義的值一些其他形式的領域,因此永遠不會是空值。
還要注意
值= 「$ {someParams?.value的}」 VS 值= 「$ {} someParams.value」
的?正在保護字段不返回空值。所以在表單開始的時候,可能沒有一個值會將其保存在用戶的屏幕上顯示爲空。
所有這麼說似乎有一個可以在你說的一些事情空VS你想設置什麼等衝突..也許你想要什麼,或者也許一個把它所有
的更簡單的方法的衝突
def f = request.getFile('productImage')
if (f.empty) {
if (params.id) {
Product old=Product.get(params.id as Long)
print("file is empty")
if (old.productImage) {
println("there is a file in database")
product.productImage=old.productImage
} else {
//what should produce.productImage be now if no file and nothing on db ?
}
} else {
//what should happen if there is no product.id ?
}
} else {
//what happens when there is a file provided - should that Product check be outside of this loop entirely should that file being returned be merged with the existing record ?
}
這裏有很多可以幫助你理解發生了什麼問題的地方。所有人都說這種東西應該通過驗證類來完成,這樣可以節省你不得不在控制器中編寫大量邏輯的過程,最終看起來太長時間了,而且太麻煩了,很難遵循。
我會稍後更新一個示例項目:https://github.com/vahidhedayati/grails-bean-validation-examples,並帶有圖像示例。希望用視頻來解釋我添加的內容。完成後會在這裏發表評論。
該代碼並不代表您列出的問題。您正在列出所有圖像,然後在該gsp顯示迭代或編輯功能中編輯任何內容,如何工作 – Vahid