Hello, Using SmartGWT 3.0 Power.
In my app, I have a button, that resets two values of a field to some default.
Very simple basically:
The data is sent correctly according to the log, but is still complaining about empty values, but the primary key Shop_id is present, as are two fields:
These are the fields / the operationbinding:
What is going wrong here? It seems like i'm doing something pretty normal?
PS: Oh in case you wonder: no, twitterAccessTokens are not supposed to be sent to the client, but in my app only a mangled version is sent to the client for some uninteresting reasons.
In my app, I have a button, that resets two values of a field to some default.
Very simple basically:
Code:
disconnect.addClickHandler(new ClickHandler(){ public void onClick(ClickEvent event) { DataSource shop = DataSource.get("Shop"); Record r = new Record(); r.setAttribute("twitterAccessToken","X"+System.currentTimeMillis()); r.setAttribute("twitterAccessSecret","X"+System.currentTimeMillis()); r.setAttribute("Shop_id", rec.getAttributeAsInt("Shop_id")); DSRequest req = new DSRequest(); req.setOperationId("UpdateSocialMediaTokens"); req.setOldValues(rec); shop.updateData(r, new DSCallback(){ public void execute(DSResponse response, Object rawData,DSRequest request) { //.... } },req); } });
Code:
=== 2012-02-23 15:05:25,900 [l0-9] DEBUG XML - Parsed XML from (in memory stream): 2ms === 2012-02-23 15:05:25,904 [l0-9] DEBUG RPCManager - Processing 1 requests. === 2012-02-23 15:05:25,905 [l0-9] DEBUG RPCManager - Request #1 (DSRequest) payload: { criteria:{ Shop_id:2 }, values:{ twitterAccessToken:"X1330005925718", twitterAccessSecret:"X1330005925718", Shop_id:2 }, operationConfig:{ dataSource:"Shop", operationType:"update" }, appID:"builtinApplication", operation:"UpdateSocialMediaTokens", oldValues:{ twitterAccessSecret:"2Ks", phone:"061234567", zipcode:"1234AB", street:"Street2", number:"2", lng:-105.513, country:"nederland", city:"City2", Shop_id:2, shopThumb:"Shop_shopThumb_2_1328437417202.jpg", description:"asdfsdf", name:"Eetcafé De Michel", descriptionLong:"1234545sdfs", twitterAccessToken:"961", bank_account:"123556", lat:39.9626 } } === 2012-02-23 15:05:25,905 [l0-9] DEBUG AppBase - [builtinApplication.UpdateSocialMediaTokens] No userTypes defined, allowing anyone access to all operations for this application === 2012-02-23 15:05:25,906 [l0-9] DEBUG AppBase - [builtinApplication.UpdateSocialMediaTokens] No public zero-argument method named '_UpdateSocialMediaTokens' found, performing generic datasource operation === 2012-02-23 15:05:25,906 [l0-9] INFO SQLDataSource - [builtinApplication.UpdateSocialMediaTokens] Performing update operation with criteria: {Shop_id:2} values: {twitterAccessToken:"X1330005925718",twitterAccessSecret:"X1330005925718",Shop_id:2} === 2012-02-23 15:05:25,907 [l0-9] WARN SQLDataSource - [builtinApplication.UpdateSocialMediaTokens] Insert, update or replace operation requires non-empty values; check submitted values parameter === 2012-02-23 15:05:25,907 [l0-9] WARN RequestContext - dsRequest.execute() failed: java.lang.Exception: Insert, update or replace operation requires non-empty values; check submitted values parameter at com.isomorphic.sql.SQLDataSource.SQLExecute(SQLDataSource.java:1224) at com.isomorphic.sql.SQLDataSource.processRequest(SQLDataSource.java:293) at com.isomorphic.sql.SQLDataSource.executeUpdate(SQLDataSource.java:241) at com.isomorphic.datasource.DataSource.execute(DataSource.java:1293) at com.isomorphic.application.AppBase.executeDefaultDSOperation(AppBase.java:721) at com.isomorphic.application.AppBase.executeAppOperation(AppBase.java:658) at com.isomorphic.application.AppBase.execute(AppBase.java:491) at com.isomorphic.datasource.DSRequest.execute(DSRequest.java:1948) at com.isomorphic.servlet.IDACall.handleDSRequest(IDACall.java:199) at nl.sytematic.projects.Marktbuzz.server.security.SecureIDACall.processRequest(SecureIDACall.java:100) at com.isomorphic.servlet.IDACall.doPost(IDACall.java:73) at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) at com.isomorphic.servlet.BaseServlet.service(BaseServlet.java:152) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1097) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:343) at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109) at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355) at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355) at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:100) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355) at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355) at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355) at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355) at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:187) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355) at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355) at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355) at nl.sytematic.projects.Marktbuzz.server.security.SytematicConcurrentSessionFilter.doFilter(SytematicConcurrentSessionFilter.java:62) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355) at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:149) at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237) at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1088) at com.isomorphic.servlet.CompressionFilter.doFilter(CompressionFilter.java:259) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1088) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360) at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:49) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.Server.handle(Server.java:324) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505) at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:843) at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647) at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380) at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395) at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488) === 2012-02-23 15:05:25,964 [l0-9] DEBUG RPCManager - Content type for RPC transaction: text/plain; charset=UTF-8 === 2012-02-23 15:05:25,965 [l0-9] DEBUG RPCManager - non-DMI response, dropExtraFields: false === 2012-02-23 15:05:25,965 [l0-9] INFO Compression - /generatedcode/sc/IDACall: 216 -> 175 bytes
Code:
<field name="twitterAccessToken" type="text" required="false" length="128"> </field> <field name="twitterAccessSecret" type="text" required="false" length="128"> </field> <operationBinding operationType="update" requiresAuthentication="true" requiresRole="CAN_UPDATE_SHOP" operationId="UpdateSocialMediaTokens"> <customSql>UPDATE Shop SET twitterAccessToken = NULL, twitterAccessSecret = NULL WHERE Shop_id=$criteria.Shop_id</customSql> </operationBinding>
PS: Oh in case you wonder: no, twitterAccessTokens are not supposed to be sent to the client, but in my app only a mangled version is sent to the client for some uninteresting reasons.
Comment