Каждый раз, когда вы добавляете объект в ArrayList, убедитесь, что вы добавили новый объект, а не уже использованный объект. Случается, что при добавлении одной и той же копии объекта этот объект добавляется в разные позиции в ArrayList. И когда вы вносите изменения в один, поскольку одна и та же копия добавляется снова и снова, все копии становятся затронутыми. Например, предположим, что у вас есть ArrayList:
ArrayList<Card> list = new ArrayList<Card>();
Card c = new Card();
Теперь, если вы добавите эту карту c в список, она не будет добавлена никаких проблем. Он будет сохранен в месте 0. Но когда вы сохраните ту же Карту c в списке, она будет сохранена в местоположении 1. Так что помните, что вы добавили один и тот же 1 объект в два разных местоположения в списке. Теперь, если вы внесете изменения в объект Card c, объекты в списке в местах 0 и 1 также отражают это изменение, потому что они являются одним и тем же объектом.
Одним из решений было бы сделать конструктор класса Card, который принимает другой объект карты. Затем в этом конструкторе вы можете установить такие свойства следующим образом:
public Card(Card c){
this.property1 = c.getProperty1();
this.property2 = c.getProperty2();
... //add all the properties that you have in this class Card this way
}
И скажем, что у вас есть одна и та же 1 копия Карты, поэтому во время добавления нового объекта вы можете сделать это:
list.add(new Card(nameOfTheCardObjectThatYouWantADifferentCopyOf));
Насколько я понимаю, вы пытаетесь реализовать «прокси» между пользователем и pdf, создавая новый контроллер Grails.
Поскольку сообщение об ошибке «Нет такого файла или каталога», я подозреваю, что эта ошибка возникла на сервере при попытке сделать File = new File("path")
... так что вы уверены, что на сервере есть подпапка с именем «путь», где приложение grails запущено?
Зависимость - введите компонент ResourceLoader
и используйте его для доступа к PDF, например,
import org.springframework.context.ResourceLoaderAware
import org.springframework.core.io.Resource
import org.springframework.core.io.ResourceLoader
class MyService implements ResourceLoaderAware {
ResourceLoader resourceLoader
InputStream getPdfContent() {
Resource pdf = resourceLoader.getResource("classpath:path/toPdf.p12")
pdf.inputStream
}
}