有没有办法使用RequestFactory在单个请求中创建两个实体?我试过了:
EmployeeRequest request = requestFactory.employeeRequest();
EmployeeProxy newEmployee = request.create(EmployeeProxy.class);
newEmployee.setName("Joe!");
Request<Void> createReq = request.persist().using(newEmployee);
createReq.fire();
EmployeeProxy newEmployee2 = request.create(EmployeeProxy.class);
newEmployee2.setName("Sam!");
Request<Void> createReq2 = request.persist().using(newEmployee2);
createReq2.fire();
Run Code Online (Sandbox Code Playgroud)
但是我收到一个错误,表明请求已在进行中.当我做两个单独的EmployeeRequests时:
EmployeeRequest request = requestFactory.employeeRequest();
EmployeeProxy newEmployee = request.create(EmployeeProxy.class);
newEmployee.setName("Joe!");
Request<Void> createReq = request.persist().using(newEmployee);
createReq.fire();
EmployeeRequest request2 = requestFactory.employeeRequest();
EmployeeProxy newEmployee2 = request2.create(EmployeeProxy.class);
newEmployee2.setName("Sam!");
Request<Void> createReq2 = request2.persist().using(newEmployee2);
createReq2.fire();
Run Code Online (Sandbox Code Playgroud)
然后从浏览器发出两个单独的请求.我希望RequestFactory中的某些东西可以合并多个请求 - 我必须一次创建数百个实体,而且我不想发出数百个请求!
我刚刚开始将我的GWT-RPC代码移植到新RequestFactory机制.
为了防止跨站点请求伪造(CSRF),我的GWT-RPC代码获取了存储在cookie中的会话ID,并将其包含在请求的有效负载中.这有可能RequestFactory吗?
据我所知,有四种强制定位器方法,包括findEntity(id_type id):所以我在想:哦,亲爱的:我在哪里提出我的会话ID?
以下线程[实体无法转换为javassist.util.proxy.Proxy,我现在有一个服务器端错误(tks thomas)我无法面对我的应用程序中的真正问题.
java.lang.ClassCastException: org.nit.persistance.entities.Manufacturers_.$$_javassist_3 cannot be cast to javassist.util.proxy.Proxy
at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.getProxy(JavassistLazyInitializer.java:148)
at org.hibernate.proxy.pojo.javassist.JavassistProxyFactory.getProxy(JavassistProxyFactory.java:73)
at org.hibernate.tuple.entity.AbstractEntityTuplizer.createProxy(AbstractEntityTuplizer.java:758)
at org.hibernate.persister.entity.AbstractEntityPersister.createProxy(AbstractEntityPersister.java:4419)
at org.hibernate.event.internal.DefaultLoadEventListener.createProxyIfNecessary(DefaultLoadEventListener.java:333)
at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:259)
at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:151)
at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1017)
at org.hibernate.internal.SessionImpl.internalLoad(SessionImpl.java:944)
at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:671)
at org.hibernate.type.EntityType.resolve(EntityType.java:489)
at org.hibernate.engine.internal.TwoPhaseLoad.doInitializeEntity(TwoPhaseLoad.java:168)
at org.hibernate.engine.internal.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:137)
at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:1112)
at org.hibernate.loader.Loader.processResultSet(Loader.java:969)
at org.hibernate.loader.Loader.doQuery(Loader.java:917)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:348)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:318)
at org.hibernate.loader.Loader.loadEntity(Loader.java:2143)
at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:82)
at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:72)
at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3939)
at org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:461)
at org.hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:430)
at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:207)
at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:263)
at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:151)
at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1017)
at org.hibernate.internal.SessionImpl.access$2000(SessionImpl.java:173)
at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.load(SessionImpl.java:2413)
at org.hibernate.internal.SessionImpl.get(SessionImpl.java:913)
at org.nit.persistance.dao.impl.FichesImpl.readbyPK(FichesImpl.java:24)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at …Run Code Online (Sandbox Code Playgroud) 我正在尝试将RequestFactory和Editor框架实现到我的应用程序中.我甚至在研究了论坛,谷歌开发者论坛以及其他人之后发现,有些基本的东西我不理解将RequestContext与RequestFactory一起使用.这是我的场景:
我有一个简单的实体,它有三个字段,id,version,描述名为CmsObjectType.我有一个对应的EntityProxy和一个CmsObjectTypeServiceDAO与我的CRUD操作.我还实现了ServiceLocator和ObjectLocator类.这段代码都编译并运行.
我还创建了一个简单的测试用例来测试CRUD操作,使用以下代码:
public class RequestFactoryProvider {
public static CmsRequestFactory get() {
SimpleEventBus eventBus = new SimpleEventBus();
CmsRequestFactory requestFactory = RequestFactoryMagic.create(CmsRequestFactory.class);
ServiceLayer serviceLayer = ServiceLayer.create();
SimpleRequestProcessor processor = new SimpleRequestProcessor(
serviceLayer);
requestFactory.initialize(eventBus, new InProcessRequestTransport(
processor));
return requestFactory;
}
Run Code Online (Sandbox Code Playgroud)
}
考试:
public class TestCmsObjectTypeRequest extends Assert {
private static CmsRequestFactory requestFactory;
private static CmsObjectTypeRequestContext objectTypeRequest;
private Long newId;
@Before
public void setUp() {
requestFactory = RequestFactoryProvider.get();
objectTypeRequest = requestFactory.objectTypeRequest();
}
@Test
public void testEdit() {
final CmsObjectTypeProxy newType = objectTypeRequest
.create(CmsObjectTypeProxy.class); …Run Code Online (Sandbox Code Playgroud) 说我有这个:
TimeEntryProxy timeEntry = someRequestContext.create(TimeEntryProxy.class);
Run Code Online (Sandbox Code Playgroud)
创建的代理为空.有没有办法用默认值设置它的一些字段?例如,此代理的timeAllocation是double.可以将其设置为0而不必执行此操作:
timeEntry.setTimeAllocation(0);
Run Code Online (Sandbox Code Playgroud)
谢谢
我正在尝试创建一个ValueProxy包含用户正在执行的搜索的一些基本信息.出于某种原因,GWT希望它是一个EntityProxy,但我不明白为什么(这个类也不是有意义的EntityProxy).
// FilterProxy extends ValueProxy
@ProxyFor(DayFilter.class)
public interface DayFilterProxy extends FilterProxy {
void setFilterValue(Date day);
Date getFilterValue();
}
public class DayFilter extends Filter {
public DayFilter() {
setOperator(FilterOperator.GREATER_THAN_OR_EQUAL);
setField("dateRequested");
}
public void setFilterValue(Date date) {
this.value = date;
}
public Date getFilterValue() {
return value;
}
}
public interface PaginationRequest<T> extends RequestContext {
Request<List<T>> paginate(int offset, int limit, String sortColumn,
boolean isSortAscending, List<FilterProxy> filters);
Request<Integer> count(List<FilterProxy> filters);
}
@Service(value=TripService.class, locator=SchedgyServiceLocator.class)
public interface TripRequest extends PaginationRequest<TripProxy> {
Request<TripProxy> save(TripProxy …Run Code Online (Sandbox Code Playgroud) GWT 2.4是否支持这种情况:
@Entity class MyBase {...}
@Entity class MyChild1 extends MyBase {...}
@Entity class MyChild2 extends MyBase {...}
...
@ProxyFor(MyBase.class) class MyBaseProxy extends EntityProxy {...}
@ProxyFor(MyChild1.class) class MyChild1Proxy extends MyBaseProxy {...}
@ProxyFor(MyChild2.class) class MyChild2Proxy extends MyBaseProxy {...}
...
@Service(ArticleBase.class)
public interface MyBaseRequest extends RequestContext {
Request<MyBaseProxy> getStuff(); // MyChild1 here
}
...
Request<MyBaseProxy> getStuffRequest = request.getStuff();
getStuffRequest.fire(new Receiver<MyBaseProxy>() {
@Override
public void onSuccess(MyBaseProxy proxy) {
button.setText(((MyChild1Proxy)proxy).getQwerty()); // HERE!
}
});
Run Code Online (Sandbox Code Playgroud)
?
问题是,我无法使其发挥作用.它要么不支持,要么我需要在某处添加一些魔法注释.当我使用具体类型时,一切正常,但如果我使用基本类型,它就不起作用.
你怎么看?
是否可以在Request方法中使用泛型?或者如果不是如何解决这个问题?
让我们说我想实现分页.所以在我的请求界面中我有这样的方法:
public List<UserProxy> getUserList(int offset, int limit);
Run Code Online (Sandbox Code Playgroud)
但该列表仅返回有限的数据.对于分页实现,我还需要完整的元素.在RPC样式中,我将使用Result对象:
public MyResultObject<User> getUserList(int offset, int limit)
Run Code Online (Sandbox Code Playgroud)
在MyResultObject中我将List和totalCount存储为属性.不幸的是,在RF中,我无法做到这一点.同样在GWT-RPC中,我可以在一个请求中使用来自一个方法的命令模式和反向列表以及来自另一个方法的totalcount.
如何在同一时间获得带元素列表的totalcount?
为简单起见:
public class Person
{
String name;
Set<Address> addresses;
}
public class Address
{
String city;
String street;
}
Run Code Online (Sandbox Code Playgroud)
与匹配
public interface PersonProxy extends EntityProxy
{
public String getName();
public Set<AdressProxy> getAddresses();
}
Run Code Online (Sandbox Code Playgroud)
和
public interface AdressProxy extends EntityProxy
{
public String getCity();
public String getStreet();
}
Run Code Online (Sandbox Code Playgroud)
我得到了UiBuinder类来编辑AddressProxy,如果我有List但是数据是在Person类中设置的,我如何使用ListEditor来清楚我如何使用ListEditor?如何使用Editor Framework来编辑它们?或者可能是当它变成PersonProxy时如何将Set转换为List?
我尝试了一种可以实现的适配器编辑器类
LeafValueEditor<Set<AddressProxy>>
Run Code Online (Sandbox Code Playgroud)
然后在LeafValueEditor.setValue()内部移动到List并在单独的Editor层次结构上启动一个新的driver.edit(),该层次结构负责List编辑但现在运气好了.
我已经开始使用自定义上下文处理器将对象传递给每个响应.唯一的问题是我的测试现在失败了,因为他们无法在数据库中找到这个对象.我尝试使用Request Factory创建一个测试,因为我的理解是这会将测试与Django膨胀隔离,就像中间件一样.我猜测上下文处理器仍在运行.有没有办法克服这个?我是否必须将此对象传递给每个测试?如果有任何办法可以避免它,我宁愿这样做.
requestfactory ×10
gwt ×8
java ×3
csrf ×1
django ×1
gwt-2.4 ×1
gwt-editors ×1
many-to-one ×1
polymorphism ×1
proxy ×1
unit-testing ×1