Как создать домашний интерфейс в службе отдыха швов, если домашний интерфейс имеет ссылку на пользователя?
Я занимаюсь разработкой своего первого приложения для Android и Seam + и столкнулся с некоторыми новыми сценариями, как и ожидалось.
Теперь специально для этого приложения я решил не сохранять никакого состояния, потому что, вероятно, от 80% до 90% обращений к серверу в службе REST будут специально выполнять простую синхронизацию, и клиент на некоторое время пропадет, поэтому есть (вероятно,) нет смысла сохранять какое-либо состояние на стороне сервера для этих вызовов.
Ну, есть особая процедура, в которой мне нужно сохранить объект, отправленный устройством на серверную часть, и этот объект привязан к определенному пользователю (на мой взгляд, очень распространенный сценарий).
Таким образом, есть некоторый код для иллюстрации.
Пользовательский интерфейс Home вводит пользователь Seam:
@Name("pesoHome")
public class PesoHome extends EntityHome<Peso> {
private static final long serialVersionUID = 6087763635317971234L;
@In
User user;
Чем нам нужен сервис отдыха, который использует этот домашний интерфейс:
public class PesoRest{
@Logger
Log log;
@In(create = true)
UserPesquisa userPesquisa;
@In(create = true)
PesoHome pesoHome;
@POST
@Path("/cadastrar/{userEmail}")
@Consumes(MediaType.APPLICATION_JSON)
public Response cadastraPeso(@PathParam("userEmail") String email, String jsonString)
{
String json = jsonString;
System.out.println("String jSon no servidor ==>> " + json);
И чем из-за внедрения пользователя в домашнем интерфейсе во время выполнения возникает следующая ошибка:
Caused by: org.jboss.seam.InstantiationException: Could not instantiate Seam component: pesoHome
at org.jboss.seam.Component.newInstance(Component.java:2144)
... 46 more
Caused by: org.jboss.seam.RequiredException: @In attribute requires non-null value: pesoHome.user
Обратите внимание, что в теле запроса объект JSon содержит информацию об этом пользователе, которая позволяет восстановить этого пользователя, используя также введенную ссылку userPesquisa. Я знаю, что у меня мог бы быть другой подход, в котором я собирал бы компонент шва без ссылок на пользователя, а затем собирал пользователя и помещал его в новый диалог, а затем вставлял нужную домашнюю ссылку, но...
Мне было интересно, что, вероятно, должен быть какой-то более стандартный подход для этого, поскольку это общий сценарий. Какие-либо предложения?:)
[] S
1 ответ
Как предложил Артур в комментариях к этой теме, я немного изменил код и теперь он работает:
PesoHome:
@In(required=false)
User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
а чем в ПесоРест:
User usuario = userPesquisa.pesquisaUsuarioPorEmail(email);
pesoHome.setUser(usuario);
И потому что теперь пользователь больше не требуется при создании, ошибка не вызывается, и я могу выполнить позднюю привязку после поиска в БД, чтобы восстановить правильного пользователя. Довольно простое решение. Спасибо Артур.
[] S